自动实现的属性(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# 编程指南)

可以在自动实现的属性上使用特性,但由于特性不可从源代码访问,显然不能用在支持字段上。 如果您必须在属性的后备字段上使用特性,则应该只创建常规属性。

请参见

参考

属性(C# 编程指南)

修饰符(C# 参考)