我有一个Enumerated类,允许下载其中包含的列表。因此,列表不需要通过字段或属性公开访问。
public class Foo : IEnumerable<Bar>
{
private List<Bar> _positions;
如果我的班级中有私人制定者的其他媒体资源,未来的程序员会看到PascalCase
,PascalCase
,PascalCase
,_asdfghjk
。咦?这是什么东西? _asdfghjk
肯定看起来很难看。
通过将_positions
变成类似
private List<Bar> Positions { get; set; }
在字段上使用属性的充分理由是什么?
答案 0 :(得分:1)
只要你一致,那么阅读你代码的人就不会感到惊讶。
如果您使用的约定是_privateField
,那么只要您在任何地方使用它,阅读代码的人都会习惯它。
如果你混合风格会带来危险。
说实话,我个人很困惑,在课堂上找到一个私有的自动getter / setter属性;引用MSDN:
属性使类能够公开获取和设置值的公共方式,同时隐藏实现或验证码。
<子> - Properties (C# Programming Guide) 子>
和
通常,您只应将字段用于具有私有或受保护辅助功能的变量。
<子> - Fields (C# Programming Guide) 子>
最后,如果你使用StyleCop,那么如果你开始一个带下划线的字段,那么它会发出警告:
字段名称不得以下划线开头。 [StyleCop规则:SA1309]
答案 1 :(得分:1)
我不会仅仅为了它而引入一个完全私有的财产。如果它从状态计算属性值,或执行验证等,这样做会很有用 - 但不要为此而这样做。
就我个人而言,我只是称它为positions
而不是_positions
- 哎呀,如果你真的希望所有的名字彼此一致,你可以称它为Positions
(但与正常的命名约定不一致。)
拥有一个不会被财产暴露的领域并不是一件特别罕见的事情 - 如果看到这样的事情困扰一个人,我会感到担心开发商。同样地,并非每个属性都应该是自动实现的属性,因此开发人员应该习惯将foo
和Foo
视为一个类的成员(foo
是私有的)。