代码整洁是否足以成为在字段上使用 属性 的充分理由?
Is code cleanliness a good enough reason to use a property over a field?
我有一个 class 枚举以允许对其中包含的列表进行下标。因此,列表不需要通过字段或 属性.
公开访问
public class Foo : IEnumerable<Bar>
{
private List<Bar> _positions;
如果我的 class 中还有其他带有私有 setter 的属性,未来的程序员将会看到 PascalCase
、PascalCase
、PascalCase
、_asdfghjk
。嗯?这是什么东西? _asdfghjk
确实看起来很丑。
是通过将 _positions
变成类似
来创建的一致性吗
private List<Bar> Positions { get; set; }
在字段上使用 属性 的充分理由?
只要您一致,阅读您代码的人就不会感到惊讶。
如果您使用的约定是 _privateField
那么只要您在任何地方都使用它,阅读您的代码的人就会习惯它。
如果你混合风格,危险就来了。
老实说,就我个人而言,如果在 class 中找到私有 auto-getter/setter 属性,我会感到困惑;引用 MSDN:
Properties enable a class to expose a public way of getting and setting values, while hiding implementation or verification code.
--Properties (C# Programming Guide)
和
Generally, you should use fields only for variables that have private or protected accessibility.
--Fields (C# Programming Guide)
最后,如果你使用的是StyleCop,那么如果你以下划线开头的字段,那么它会警告:
Field names must not start with an underscore. [StyleCop Rule: SA1309]
我不会仅仅为了它而引入完全私有的 属性。如果它从状态计算 属性 值,或执行验证等,那么这样做可能很有用 - 但不要只是为了它而这样做。
就我个人而言,我只是称它为 positions
而不是 _positions
- 哎呀,如果你真的希望所有名称都相互一致,你可以称它为 Positions
(但与正常的命名约定不一致)。
没有 被 属性 公开的字段应该不是特别罕见的事情 - 如果看到这样的我会担心事情困扰了开发人员。同样,并非每个 属性 都应该是自动实现的 属性,因此开发人员应该习惯于将 foo
和 Foo
视为 class 的成员( foo
是私人的)。
我有一个 class 枚举以允许对其中包含的列表进行下标。因此,列表不需要通过字段或 属性.
公开访问public class Foo : IEnumerable<Bar>
{
private List<Bar> _positions;
如果我的 class 中还有其他带有私有 setter 的属性,未来的程序员将会看到 PascalCase
、PascalCase
、PascalCase
、_asdfghjk
。嗯?这是什么东西? _asdfghjk
确实看起来很丑。
是通过将 _positions
变成类似
private List<Bar> Positions { get; set; }
在字段上使用 属性 的充分理由?
只要您一致,阅读您代码的人就不会感到惊讶。
如果您使用的约定是 _privateField
那么只要您在任何地方都使用它,阅读您的代码的人就会习惯它。
如果你混合风格,危险就来了。
老实说,就我个人而言,如果在 class 中找到私有 auto-getter/setter 属性,我会感到困惑;引用 MSDN:
Properties enable a class to expose a public way of getting and setting values, while hiding implementation or verification code.
--Properties (C# Programming Guide)
和
Generally, you should use fields only for variables that have private or protected accessibility.
--Fields (C# Programming Guide)
最后,如果你使用的是StyleCop,那么如果你以下划线开头的字段,那么它会警告:
Field names must not start with an underscore. [StyleCop Rule: SA1309]
我不会仅仅为了它而引入完全私有的 属性。如果它从状态计算 属性 值,或执行验证等,那么这样做可能很有用 - 但不要只是为了它而这样做。
就我个人而言,我只是称它为 positions
而不是 _positions
- 哎呀,如果你真的希望所有名称都相互一致,你可以称它为 Positions
(但与正常的命名约定不一致)。
没有 被 属性 公开的字段应该不是特别罕见的事情 - 如果看到这样的我会担心事情困扰了开发人员。同样,并非每个 属性 都应该是自动实现的 属性,因此开发人员应该习惯于将 foo
和 Foo
视为 class 的成员( foo
是私人的)。