具有公共访问者的自动财产与受保护变量

时间:2012-05-15 18:31:08

标签: c# properties

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

protected MyEnumerationType _foo;

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

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

public MyEnumerationType Foo { get; set; }

我错过了什么吗?上面的第一部分代码是否有一些我不知道的优势?

2 个答案:

答案 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>