2014-12-03 93 views
0

在C#中,你可以使用没有字段的属性吗?你可以在C#中使用没有字段的属性吗?

编辑澄清:

private string _name; 

public string Name 
{ 
    get { return _name; } 
    set { _name value; } 
} 

这似乎就像他们总是成对的,有一种情况,我们不使用领域呢?

+0

当然,有些属性是沙漠,沼泽等,您可以使用一块的财产,即使它没有在它的字段。一边开玩笑,我不确定你在问什么,你能详细说明一下吗? – cost 2014-12-03 01:36:13

+0

当然,我会编辑主要的 – 2014-12-03 01:40:56

+0

如果它只是返回一个常量,那么就没有字段,例如。 – 2014-12-03 01:46:11

回答

2

所有属性必须有一个字段,假设它们是简单的属性存储一个值(*)。但是,该语言(as of version 3.0)提供了一种隐式声明该字段的方法。例如:

public int Value { get; set; } 

这将宣布一个名为Value属性与隐场后盾它和getter和setter公有。您可以在获取者或设置者上包含辅助功能关键字,以限制对媒体资源的访问。例如:

public int Value { get; private set; } 

在这种情况下,只有拥有类型可能调用setter,但任何类都可以调用getter。

C#的下一个版本将具有处理这些“自动属性”的附加功能,允许您为它们提供简洁的初始化语法。现在,你必须在构造函数中初始化它们。


编辑:根据您编辑的问题,它似乎是值得来解决这个具体的问题:“有一种情况,我们不使用领域呢?”

答案就是,没有字段根本不常见。但它是可能的,并且并不常见,表示属性不使用字段作为属性的存储。例如,设想一个Rectangle物体与Area属性:

class Rectangle 
{ 
    public double Width { get; private set; } 
    public double Height { get; private set; } 
    public double Area { get { return Width * Height; } } 
} 

显然,有涉及(两个)的字段,但是还没有一个特别专用于Area属性字段。

另一个例子是属性代表的地方。例如,在一个WinForms Form子类,它是常见的通过属性以暴露特定的控制值:

class MyForm : Form 
{ 
    public string EditText 
    { 
     get { return textBox1.Text; } 
     set { textBox1.Text = value; } 
    } 
} 

再次,textBox1字段被用在这里。但它实际上代表了财产本身以外的其他东西。该属性正在使用该字段引用的对象的成员。

我希望能够澄清字段和属性之间的关系。如有需要,请随时要求进一步澄清。


(*)请注意,属性唯一真正的规则是它们至少有一个getter或setter,并且这些方法可以做任何你想要的。我假设我们在这里谈论简单的基于价值的属性。

+0

感谢您的澄清...所以如果我正确地理解你,总有一个字段,它并不总是明确定义。在自动属性的情况下,C#编译器会自动添加字段? – 2014-12-03 01:49:24

+1

我认为这是一个非常混乱的方式来回答这个问题。属性不需要任何方式的字段。通过自动实现的属性,编译器生成一个字段。 – 2014-12-03 01:52:22

+0

@mike z我想这取决于问题的表达方式。如果它是“我需要包含一个属性字段”的否,如果问题是“每个属性都有一个字段”,答案就是肯定的。不幸的是,我的问题不太清楚。 – 2014-12-03 01:57:38

1

如果你问我认为你是什么,答案是肯定的,你只需要得到;组;属性声明内。 C#为你封装了一个变量。

编辑:例如

//no need for field declaration 
public string Name 
{ 
    get; 
    set; 
} 
+0

没有属性使用该字段的返回(get)和值(set)? – 2014-12-03 01:40:17

+0

@dbeaulieu它使用内部创建的字段,您不必创建它。 – markg 2014-12-03 01:42:16

1

属性是不需要有一个字段

public string Version 
{ 
    get 
    { 
     return "1.3.Awesome"; 
    } 
} 
相关问题