Yoa*_*. B 36 .net c# properties
使用私有属性而不是私有字段有什么区别
private String MyValue { get; set; }
// instead of
private String _myValue;
public void DoSomething()
{
MyValue = "Test";
// Instead of
_myValue = "Test";
}
Run Code Online (Sandbox Code Playgroud)
有任何性能问题吗?或只是一个命名惯例?
tva*_*son 26
私有属性允许您抽象内部数据,以便对内部表示的更改不需要影响实现的其他部分,即使在同一个类中也是如此.私人领域不提供这种优势.使用C#3.0中的自动属性,我很少看到需要直接实现字段 - 私有或公共.
Jar*_*Par 19
您可以从房产(私人,公共......)获得的巨大收益是它可以产生计算值与设定值.例如
class Person {
private DateTime _birthday;
private int _age { get { return (DateTime.Now - _birthday).TotalYears; }
}
Run Code Online (Sandbox Code Playgroud)
此模式的优点是,必须仅为N个其他值更新一个值以反映更改.无论可访问性如何,属性都是如此.私有财产与非私有财产没有特定的优势(当然,除了私有财产外)
Ram*_*der 11
你很少想私有财产.提供私人财产只是为了完整起见.如果你的属性只是获取/设置字段的值,那么没有性能差异,因为它很可能由JIT编译器内联.
除了已经回答的问题,性能、语义和完整性之外,我还看到了一种针对私有属性而不是私有字段的有效案例:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
假设我们出于某种原因不想公开 Parent,但我们可能还想进行验证检查。父级是否可以作为子级添加到其子级之一?
要解决此问题,您可以将其设为属性并执行循环引用检查。