包含或不包含私有字段的属性

时间:2013-12-10 08:45:59

标签: c# properties code-conversion

更“真实”:使用包含或不包含私有字段的属性。 即。

1

class A
{
    int _field;
    public int Field
    {
        get{ return _field;}
        set{_field = value;}
    }
}

2

class A
{
    public int Field{get;private set;}
}

4 个答案:

答案 0 :(得分:1)

Number 2会自动创建一个支持字段,因此您总是在“幕后”拥有一个私有字段(尽管在后一种情况下无法直接访问)。

答案 1 :(得分:0)

当您创建匿名属性编译器时为您创建相应的字段,因此它几乎相同,但您只能通过属性访问自动处理字段

答案 2 :(得分:0)

没有区别 - 编译器为您生成属性实现的方式与生成默认构造函数或using语句的代码完全相同。这两个类几乎是100%等效,如果你反编译一个自动属性你可以看到(唯一的区别是编译器使用的生成的支持字段的名称)

class A
{
    public int Field {get; private set;}
}

class A
{
    int _field;
    public int Field
    {
        get { return _field; }
        private set {_field = value; }
    }
}

完全取决于您的个人偏好。

答案 3 :(得分:0)

如前所述,第二个在编译时创建了支持字段。如果您希望该属性充当该字段的公共访问者,您通常可以定义自己的支持字段,您可以在其中添加自定义逻辑或阻止修改该值(使用setter上的private关键字)。