1

可能重复:
C# 3.0 自动属性 ​​- 有用与否?

我的老板和我经常争论使用自动属性的好处和坏处。

public string Name { get; set; }

对比

private string name;

public string Name
{
    get { return this.name; }
    set { this.name = value; }
}

为了

我强烈赞成使用它们,因为我必须编写更少的代码,当所有字段都以这种方式编码时,我发现更容易理解该类,并且从长远来看只是为我节省了大量时间(主要是因为我写了一个每次少一点代码)。

反对

他认为它们违反了一些编程原则,因为字段应该反映对象的状态,并且通过使用属性而不是具有属性的字段来访问它,我在调试时会丢失该信息。(老大,如果你读到了这篇文章,但不是你的意思,请随时发表评论;))

大家对这件事怎么看?

注意:我已经查看了副本,它没有谈论反对点,这是这个问题的重点。只是人们说“我爱他们”/“我不在乎”。

4

3 回答 3

1

你如何放弃这些信息?属性反映的是对象的状态而不是字段 - 有那么大的区别吗?

我唯一想让它由字段支持的情况是,如果我需要在设置它时执行额外的逻辑(即:验证),或者当我想要强制执行设计模式(例如缓存值或单例等)时。

于 2010-09-12T02:00:27.620 回答
0

也许我对 Auto 实现的属性的理解是有缺陷的,但是如果要获取文档,它仍然是由属性支持的。自动实现的属性只是编写样板代码的捷径。编译器在编译时扩展 Auto 属性,对吗?如果您查看 IL,它应该会显示一个支持字段。我相信支持字段是带有下划线的属性名称。

因此,该字段确实反映了对象的状态,您不必编写那么多代码。该字段只是隐藏在 IDE 中,但如果您愿意,您仍然应该能够使用反射访问它。

于 2010-09-12T02:10:49.247 回答
-1

他的论点是错误的(所以也许你错误地引用了它)。

无论如何,没关系。你夸大了你节省了多少时间。对于大多数实际应用程序,您将从自动属性开始,并最终将其更改为由真实字段支持以用于各种目的。这真是一个无用的论点。

于 2010-09-12T01:59:53.843 回答