私人领域与私人财产的区别

使用私有属性而不是私有字段有什么区别

private String MyValue { get; set; } // instead of private String _myValue; public void DoSomething() { MyValue = "Test"; // Instead of _myValue = "Test"; } 

有没有任何性能问题? 或只是一个命名约定?

私有属性允许您抽象内部数据,以便对内部表示的更改不需要影响实现的其他部分,即使在同一个类中也是如此。 私人领域不提供这种优势。 使用C#3.0中的自动属性,我很less看到需要直接实现字段 – 私有的或公共的。

你可以从财产(私人,公共,…)获得的巨大收益是它可以产生一个计算值与一个设定值。 例如

 class Person { private DateTime _birthday; private int _age { get { return (DateTime.Now - _birthday).TotalYears; } } 

这种模式的优点是,只有一个值必须更新N个其他值来反映这个变化。 无论可访问性如何,属性都是如此。 私有财产和非私人财产并没有什么特别的优势(当然除了私有财产以外)

你很less想要私有财产。 只有为了完整才提供财产的私人提供。 如果您的属性只是获取/设置字段的值,那么没有性能差异,因为它很可能由JIT编译器内联。

其他什么已经被回答,性能,symantics和completness有一个有效的情况下,我已经看到私人财产,而不是一个私人领域:

 public class Item { private Item _parent; private List<Item> _children; public void Add(Item child) { if (child._parent != null) { throw new Exception("Child already has a parent"); } _children.Add(child); child._parent=this; } } 

假设我们不想因为任何原因而暴露Parent,但是我们也可能想要进行validation检查。 父母是否应该成为孩子的一个孩子?

要解决这个问题,你可以使这个属性,并执行检查循环引用。

财产访问将(分数)慢,因为它会调用getter / setter。 好处是可以进行数据validation,例如,如果更改要保护的属性,则可以过滤到inheritance者。

在处理私人访问时,差异非常小。 是的,有一个性能命中(可以通过JIT优化)发送属性代表一个方法调用,而不是一个直接的地址访问。

使用属性的主要优点是允许更改实现而不更改所需的外部签名。 由于这些是私人访问,所以对实现的任何更改只会影响本地代码。

在与私人成员打交道时,除了你们团队的惯例之外,我看不出有什么好处。