在我最近继承责任的一些代码中,我发现了一些原始开发人员执行类似以下操作的实例:
protected MyEnumerationType _foo;
public MyEnumerationType Foo
{
get { return _foo; }
set { this._foo = (MyEnumerationType) value; }
}
这对我来说似乎不必要地冗长,我很好奇这样做是否有一些优势,而不仅仅是使用自动属性:
public MyEnumerationType Foo { get; set; }
我错过了什么吗?上面的第一部分代码是否有一些我不知道的优势?
答案 0 :(得分:2)
原始代码可能是在C#3.0发布之前编写的,即引入auto-implemented properties时。在该语言的早期版本中,第一种方法是唯一可行的方法。
在C#3.0及更高版本中,显式定义支持字段的主要优点是对其执行通过属性无法实现的操作,例如使用默认值初始化(否则必须通过构造函数完成)并宣布它是不稳定的。
答案 1 :(得分:1)
这个可以有利,不知道它是否在您的域中,所以,如果您认为派生自该类的类可以访问字段MyEnumerationType _foo
,请避免在此方式(由于某种原因)通过财产访问它。
很难说在你的特定背景下是否有某些意义,但是,我再说一遍,可能有上述含义。
例如,如果我有:
public MyEnumerationType Foo
{
get { return _foo; }
set {
this._foo = (MyEnumerationType) value;
TriggerSomething(..);
}
}
所以设置该属性我将在我的环境中触发一些操作,直接访问字段将帮助我避免不必要的(用于架构决策)触发,如果我从某个子类更改该字段。< / p>