C#中的自动属性

automatic properties in C#

本问题已经有最佳答案,请猛点这里访问。

需要了解使用自动属性的好处,除了少一些代码行?

最初我们使用如下:

1
2
3
4
5
6
private int sample;

public int Sample
{ get {return sample};
  set {this.sample=value};
}

现在我们直接得到n集,为什么我们要定义一个私有变量?


您仍然在创建一个私有变量——编译器只是在幕后为您完成了这个操作。变量被赋予了一个"无法形容的名称",确保您不能在源代码中引用它。

您仍然可以获得属性的所有好处(稍后您可以从自动属性更改为"手动"属性,不存在兼容性问题),但不存在所有问题。其好处就是代码最终变得更加简洁。不过,我认为这是一个巨大的好处:)


您的私有示例变量称为支持字段,它保存属性的实际数据。如果属性只是基本的get/set,则不需要自己声明支持字段。正如jon skeet提到的,后台字段将由编译器在后台生成。如果您的需求发生了变化,您可以决定稍后自己声明一个支持字段,并在您的属性中使用它。由于代码的其余部分使用该属性,因此代码仍将编译。

当属性包含某些逻辑时,支持字段非常有用。

例如,如果没有支持字段(不是在setter中),就不能执行以下操作

1
2
3
4
5
6
7
8
9
10
public int Sample
{
    get { return _sample; }
    set
    {
       if (value > _sample)
          _sample = value;

    }
}

此外,如果getter和setter没有逻辑,则可以这样编写属性。

1
public int Sample { get; set; }