用私有财产替换班级中的每个字段是不好的做法吗?

时间:2014-05-08 13:11:57

标签: c# properties coding-style naming-conventions conventions

我倾向于使用私有属性而不是私有字段,因为如果需要可以扩展它们,所以我的大多数模型类看起来像这样:

public class MyClass
{
    public MyClass(string name)
    {
         this.Name = name;
    }

    private string Name { get; set; }
    private ISomeInterface SomeInterface { get; set; }
    private bool IsSomething { get; set; }

    public void Method(int parameter) { ... }
}

换句话说,我通常用私有属性替换私有字段。即使在类上下文中,也使用属性,而不是字段。其中大多数是自动属性。我经常发现我的类根本没有私有字段(嗯,只有自动属性的自动支持字段)。

如果你想改变行为,我发现这很有用(字段不允许这样的灵活性)。

我想知道这是一种不好的做法。

  • 如果这是一个不好的做法:为什么?
  • 如果不是:你认为我应该在课堂上使用“this”关键字来提高易读性吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

这可能是一个偏好问题,但我不喜欢使用私有属性而不是私有字段:

  • 有一个非常有用的YAGNI原则,声明不会做可能将来有用的东西。通常,类不应该像巨大的怪物一样,并且当你需要它时,你将能够非常快速地将字段包裹到属性中。
  • 这是内部类实现的一部分,您可以随时更改而不会破坏您的类的客户端(与公共属性和字段截然不同的故事 - 通常使用属性更好,即使您现在不需要一些额外的逻辑)。
  • 正如@dcastro指出的那样,可能没有任何性能损失,但如果没有编译器优化,私有字段的性能优于属性(即方法)。
  • 命名。我喜欢用下划线命名私人字段,例如_name允许我快速区分私人和公共成员。

当我在设置某个变量时需要执行一些额外的操作,或者在根据其他值计算值时,或者在延迟加载值时,我有时会使用私有属性。但是当我使用时,我清楚地看到那里发生了一些事情。这非常有用。如果所有字段都是属性,我就没有那个提示。