自动属性与具有公共访问器的受保护变量

本文关键字:访问 受保护 变量 属性 | 更新日期: 2023-09-27 18:34:19

在我最近继承了责任的一些代码中,我发现了几个原始开发人员执行以下操作的实例:

protected MyEnumerationType _foo;
public MyEnumerationType Foo
{
    get { return _foo; }
    set { this._foo = (MyEnumerationType) value; }
}

这对我来说似乎是不必要的冗长,我很好奇这样做而不是简单地使用自动属性是否有一些优势:

public MyEnumerationType Foo { get; set; }

我错过了什么吗? 上面第一段代码有什么我不知道的优点吗?

自动属性与具有公共访问器的受保护变量

原始代码很可能是在 C# 3.0 发布之前编写的,这是引入自动实现属性的时间。在该语言的早期版本中,第一种方法是唯一可能的方法。

在 C# 3.0 及更高版本中,显式定义支持字段的主要优点是对其执行无法通过属性执行的操作,例如使用默认值对其进行初始化(否则必须通过构造函数完成)并将其声明为可变字段。

这可能是

优势,不知道它是否在您的域中,因此,如果您认为从该类派生的类可以访问该字段MyEnumerationType _foo,请避免以这种方式(出于某种原因)通过属性访问它。

很难说在你的特定上下文中是否有某种意义,但是,我再说一遍,可能有上面描述的意义。

例如,如果我有:

public MyEnumerationType Foo
{
    get { return _foo; }
    set { 
           this._foo = (MyEnumerationType) value; 
           TriggerSomething(..);
       }
}

因此,设置该属性我会在我的环境中触发一些操作,如果我从某个子类更改该字段,直接访问该字段将有助于我避免不必要的(对于架构决策)触发。