0

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

protected MyEnumerationType _foo;

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

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

public MyEnumerationType Foo { get; set; }

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

4

2 回答 2

2

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

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

于 2012-05-15T18:35:07.467 回答
1

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

很难说在您的特定上下文中是否有某些含义,但是,我再说一遍,可能存在上述含义。

例如,如果我有:

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

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

于 2012-05-15T18:32:39.327 回答