在C#中,你可以使用没有字段的属性吗?你可以在C#中使用没有字段的属性吗?
编辑澄清:
private string _name;
public string Name
{
get { return _name; }
set { _name value; }
}
这似乎就像他们总是成对的,有一种情况,我们不使用领域呢?
在C#中,你可以使用没有字段的属性吗?你可以在C#中使用没有字段的属性吗?
编辑澄清:
private string _name;
public string Name
{
get { return _name; }
set { _name value; }
}
这似乎就像他们总是成对的,有一种情况,我们不使用领域呢?
所有属性必须有一个字段,假设它们是简单的属性存储一个值(*)。但是,该语言(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,并且这些方法可以做任何你想要的。我假设我们在这里谈论简单的基于价值的属性。
感谢您的澄清...所以如果我正确地理解你,总有一个字段,它并不总是明确定义。在自动属性的情况下,C#编译器会自动添加字段? – 2014-12-03 01:49:24
我认为这是一个非常混乱的方式来回答这个问题。属性不需要任何方式的字段。通过自动实现的属性,编译器生成一个字段。 – 2014-12-03 01:52:22
@mike z我想这取决于问题的表达方式。如果它是“我需要包含一个属性字段”的否,如果问题是“每个属性都有一个字段”,答案就是肯定的。不幸的是,我的问题不太清楚。 – 2014-12-03 01:57:38
如果你问我认为你是什么,答案是肯定的,你只需要得到;组;属性声明内。 C#为你封装了一个变量。
编辑:例如
//no need for field declaration
public string Name
{
get;
set;
}
没有属性使用该字段的返回(get)和值(set)? – 2014-12-03 01:40:17
@dbeaulieu它使用内部创建的字段,您不必创建它。 – markg 2014-12-03 01:42:16
属性是不需要有一个字段
public string Version
{
get
{
return "1.3.Awesome";
}
}
当然,有些属性是沙漠,沼泽等,您可以使用一块的财产,即使它没有在它的字段。一边开玩笑,我不确定你在问什么,你能详细说明一下吗? – cost 2014-12-03 01:36:13
当然,我会编辑主要的 – 2014-12-03 01:40:56
如果它只是返回一个常量,那么就没有字段,例如。 – 2014-12-03 01:46:11