自动属性与具有公共访问器的受保护变量
本文关键字:访问 受保护 变量 属性 | 更新日期: 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(..);
}
}
因此,设置该属性我会在我的环境中触发一些操作,如果我从某个子类更改该字段,直接访问该字段将有助于我避免不必要的(对于架构决策)触发。