我的老板和我经常争论使用自动属性的好处和坏处。
public string Name { get; set; }
VS
private string name;
public string Name
{
get { return this.name; }
set { this.name = value; }
}
我强烈支持使用它们,因为我必须编写更少的代码,当所有字段以这种方式编码时,我发现更容易理解类从长远来看,为我节省了大量时间(主要是因为我每次都写了少量代码)。
他认为他们打破了一些编程原则,因为字段应该反映对象的状态,并且通过使用属性而不是具有属性的字段来访问它,我在调试时丢失了这些信息。 (老板,如果你读到这个并且它不完全是你的意思,请随意发表评论;))
每个人对此事的看法是什么?
注意:我查看了副本,但没有谈到反对点,这就是这个问题的重点。只是人们说“我爱他们”/“我不在乎”。
答案 0 :(得分:1)
你如何放弃这些信息?该属性反映了对象的状态而不是字段 - 这是一个很大的区别吗?
我想让它由字段支持的唯一一次是,如果我在设置它时需要做额外的逻辑(即:验证),或者当我想强制执行设计模式时,比如缓存值或单例等。< / p>
答案 1 :(得分:0)
也许我对Auto实现的属性的理解是有缺陷的,但是如果文档要被开发,它仍然由属性支持。自动实现的属性是仅用于编写样板代码的快捷方式。编译器在编译时扩展了Auto属性,对吧?如果您查看IL,它应该显示一个支持字段。我相信支持字段是以下划线开头的属性名称。
因此,该字段确实反映了对象的状态,并且您不必编写尽可能多的代码。该字段只是隐藏在IDE中,但如果您愿意,仍然可以使用反射访问它。
答案 2 :(得分:-1)
他的论点是错误的(所以也许你错误地引用了它)。
无论如何,没关系。你夸大了你节省了多少时间。对于大多数真实世界的应用程序,您将从自动属性开始,并最终将其更改为由真实字段支持以用于各种目的。这真是一个无用的论点。