自动实现的属性

自动实现的属性是在 C#3,引进 的自动实现的属性都被定义为一个空的 getter 和 setter(存取):

public bool IsValid { get; set; }

在代码中写入自动实现的属性时,编译器会创建一个只能通过属性的访问器访问的私有匿名字段。

上面自动实现的属性语句相当于编写这个冗长的代码:

private bool _isValid;
public bool IsValid
{
    get { return _isValid; }
    set { _isValid = value; }
}

自动实现的属性在其访问器中不能包含任何逻辑,例如:

public bool IsValid { get; set { PropertyChanged("IsValid"); } } // Invalid code

但是,自动实现的属性可以为其访问者提供不同的访问修饰符:

public bool IsValid { get; private set; }    

C#6 允许自动实现的属性根本没有 setter(使其成为不可变的,因为它的值只能在构造函数中设置或硬编码):

public bool IsValid { get; }    
public bool IsValid { get; } = true;

有关初始化自动实现的属性的更多信息,请阅读 Auto-property initializers 文档。