【发布时间】:2011-01-11 02:33:36
【问题描述】:
我对 C# 还很陌生,我认为属性是一件很棒的事情。太棒了,事实上,我看不到使用字段的任何真正优势。即使对于私有字段,属性提供的灵活性和模块化似乎充其量可以为您省去严重的麻烦,最坏的情况是完全没有效果。
我可以看到字段的唯一优势是您可以内联初始化它们。但大多数时候,无论如何,您都希望在构造函数中初始化它们。如果你不使用内联初始化,有什么理由不一直使用属性吗?
编辑:有些人提出需要使用字段备份属性(显式或自动)。让我澄清一下我的问题:是否有任何理由使用字段除了备份属性?即,是否有任何时候SomeType someField; 比SomeType SomeProperty { get; set; } 更可取?
编辑 2:DanM、Skurmedel 和 Seth 都给出了非常有用的答案。我接受了 DanM 的,因为它是最完整的,但如果有人将他们的回答总结为一个答案,我很乐意接受。
【问题讨论】:
-
不,我认为这是一个非常好的问题,也确实非常微妙。绝对不同。
-
这不是重复的。另一个问题问“A和B有什么区别”;这个人承认 A 和 B 之间的区别并问“A 是否会使 B 过时?”
-
在 C# 6.0 中,自动属性将支持内联初始化和
readonly关键字,这使得这个问题更加贴切。 -
@hypehuman 我知道内联初始化
SomeType SomeProperty { get; } = new SomeType();,但readonly关键字是什么意思?
标签: c# coding-style properties field