是否可以在 C# 中使用没有字段的属性

本文关键字:字段 属性 是否 | 更新日期: 2023-09-27 18:32:50

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

编辑澄清:

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

似乎它们总是配对的,有没有一种情况我们根本不使用该字段?

是否可以在 C# 中使用没有字段的属性

所有属性都必须有一个字段,假设它们是存储值 (*( 的简单属性。但是,该语言(从版本 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;
}