一、定义
编译器会自动生成私有字段
二、注意与抽象属性的区别
三、不能定义只读或者只写的属性,必须同时提供
四、可以给读和写赋予不同的访问权限
五、自动属性和初始值
自动属性会为字段自动赋予变量类型的初始值,如果是引用类型,则为null
所以不能直接在自动属性上使用new,需要用自定义的构造函数初始化
六、不适用的情况
如果想在属性中增加判断、验证等逻辑,则只能用传统的属性定义方法实现
class Car
{
// Automatic property syntax.
public string PetName { get; set; }
}
{
// Automatic property syntax.
public string PetName { get; set; }
}
编译器会自动生成私有字段
二、注意与抽象属性的区别
abstract class Car
{
// Abstract property in an abstract base class.
public abstract string PetName { get; set; }
}
{
// Abstract property in an abstract base class.
public abstract string PetName { get; set; }
}
三、不能定义只读或者只写的属性,必须同时提供
// Read-only property? Error!
public int MyReadOnlyProp { get; }
// Write only property? Error!
public int MyWriteOnlyProp { set; }
public int MyReadOnlyProp { get; }
// Write only property? Error!
public int MyWriteOnlyProp { set; }
四、可以给读和写赋予不同的访问权限
public string PetName { get; protected set; }
五、自动属性和初始值
自动属性会为字段自动赋予变量类型的初始值,如果是引用类型,则为null
所以不能直接在自动属性上使用new,需要用自定义的构造函数初始化
class Garage
{
// The hidden backing field is set to zero!
public int NumberOfCars { get; set; }
// The hidden backing field is set to null!
public Car MyAuto { get; set; }
// Must use constructors to override default
// values assigned to hidden backing fields.
public Garage()
{
MyAuto = new Car();
NumberOfCars = 1;
}
public Garage(Car car, int number)
{
MyAuto = car;
NumberOfCars = number;
}
}
{
// The hidden backing field is set to zero!
public int NumberOfCars { get; set; }
// The hidden backing field is set to null!
public Car MyAuto { get; set; }
// Must use constructors to override default
// values assigned to hidden backing fields.
public Garage()
{
MyAuto = new Car();
NumberOfCars = 1;
}
public Garage(Car car, int number)
{
MyAuto = car;
NumberOfCars = number;
}
}
六、不适用的情况
如果想在属性中增加判断、验证等逻辑,则只能用传统的属性定义方法实现