是否可以在 C# 中使用没有字段的属性
本文关键字:字段 属性 是否 | 更新日期: 2023-09-27 18:32:50
在 C# 中,可以使用没有字段的属性吗?
编辑澄清:
private string _name;
public string Name
{
get { return _name; }
set { _name value; }
}
似乎它们总是配对的,有没有一种情况我们根本不使用该字段?
所有属性都必须有一个字段,假设它们是存储值 (*( 的简单属性。但是,该语言(从版本 3.0 开始(提供了一种隐式声明字段的方法。例如:
public int Value { get; set; }
这将声明一个名为 Value
的属性,其中包含一个支持它的隐式字段,并且 getter 和 setter 都是公共的。您可以在 getter 或 setter 上包含辅助功能关键字,以限制对属性的访问。例如:
public int Value { get; private set; }
在这种情况下,只有拥有类型可以调用 setter,但任何类都可以调用 getter。
下一版本的 C# 将具有用于处理这些"自动属性"的附加功能,允许您为它们提供简洁的初始化语法。现在,您必须在构造函数中初始化它们。
编辑:根据您编辑的问题,似乎值得解决这个特定问题:"是否存在我们根本不使用该字段的情况?
答案是,完全不涉及任何领域的情况并不常见。但这是可能的,属性不使用字段作为属性的存储的情况并不少见。例如,假设一个具有 Area
属性的 Rectangle
对象:
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,这些方法可以做任何你想做的事情。我假设我们在这里谈论的是简单的基于值的属性。
属性不需要具有字段
public string Version
{
get
{
return "1.3.Awesome";
}
}
如果你问我认为你是什么,答案是肯定的,你只需在属性声明中输入get; set;C# 为你封装了一个变量。
编辑:示例
//no need for field declaration
public string Name
{
get;
set;
}