代码清洁是否足以成为在字段上使用属性的理由?

时间:2015-01-22 15:02:41

标签: c# .net properties coding-style

我有一个Enumerated类,允许下载其中包含的列表。因此,列表不需要通过字段或属性公开访问。

public class Foo : IEnumerable<Bar>
{
    private List<Bar> _positions;

如果我的班级中有私人制定者的其他媒体资源,未来的程序员会看到PascalCasePascalCasePascalCase_asdfghjk。咦?这是什么东西? _asdfghjk肯定看起来很难看。

通过将_positions变成类似

的内容来创建一致性
private List<Bar> Positions { get; set; }

在字段上使用属性的充分理由是什么?

2 个答案:

答案 0 :(得分:1)

只要你一致,那么阅读你代码的人就不会感到惊讶。

如果您使用的约定是_privateField,那么只要您在任何地方使用它,阅读代码的人都会习惯它。

如果你混合风格会带来危险。

说实话,我个人很困惑,在课堂上找到一个私有的自动getter / setter属性;引用MSDN:

  

属性使类能够公开获取和设置值的公共方式,同时隐藏实现或验证码。
  <子> - Properties (C# Programming Guide)

  

通常,您只应将字段用于具有私有受保护辅助功能的变量。
  <子> - Fields (C# Programming Guide)

最后,如果你使用StyleCop,那么如果你开始一个带下划线的字段,那么它会发出警告:

  

字段名称不得以下划线开头。 [StyleCop规则:SA1309]

答案 1 :(得分:1)

我不会仅仅为了它而引入一个完全私有的财产。如果它从状态计算属性值,或执行验证等,这样做会很有用 - 但不要为此而这样做。

就我个人而言,我只是称它为positions而不是_positions - 哎呀,如果你真的希望所有的名字彼此一致,你可以称它为Positions(但与正常的命名约定不一致。)

拥有一个不会被财产暴露的领域并不是一件特别罕见的事情 - 如果看到这样的事情困扰一个人,我会感到担心开发商。同样地,并非每个属性都应该是自动实现的属性,因此开发人员应该习惯将fooFoo视为一个类的成员(foo是私有的)。