自动实现的属性(C# 编程指南)
在 C# 3.0 和更高版本中,当属性的访问器中不需要其他逻辑时,自动实现的属性可使属性声明更加简洁。 客户端代码还可通过这些属性创建对象。 如下面的示例所示声明属性时,编译器将创建一个私有的匿名支持字段,该字段只能通过属性的 get 和 set 访问器进行访问。
示例
下面的示例演示了一个具有某些自动实现的属性的简单类:
// This class is mutable. Its data can be modified from
// outside the class.
class Customer
{
// Auto-Impl Properties for trivial get and set
public double TotalPurchases { get; set; }
public string Name { get; set; }
public int CustomerID { get; set; }
// Constructor
public Customer(double purchases, string name, int ID)
{
TotalPurchases = purchases;
Name = name;
CustomerID = ID;
}
// Methods
public string GetContactInfo() {return "ContactInfo";}
public string GetTransactionHistory() {return "History";}
// .. Additional methods, events, etc.
}
class Program
{
static void Main()
{
// Intialize a new object.
Customer cust1 = new Customer ( 4987.63, "Northwind",90108 );
//Modify a property
cust1.TotalPurchases += 499.99;
}
}
前面示例中所示的类是可变的。 客户端代码可在对象创建后更改对象中的值。 在包含大量行为(方法)以及数据的复杂类中,通常需要有公共属性。 但是,对于仅封装一组值(数据)且只有极少行为或没有行为的较小类或结构,建议将 set 访问器声明为 private 以使对象不可变。 有关更多信息,请参见 如何:使用自动实现的属性实现轻量类(C# 编程指南)。
可以在自动实现的属性上使用特性,但由于特性不可从源代码访问,显然不能用在支持字段上。 如果您必须在属性的后备字段上使用特性,则应该只创建常规属性。