自動實作的屬性 (C# 程式設計手冊)

在 C# 3.0 及更新版本中,當屬性存取子中不需要額外的邏輯時,自動實作的屬性可讓屬性宣告變得更精簡。 它們還可讓用戶端程式碼建立物件。 當您宣告屬性時,如下列範例所示,編譯器會建立私用、匿名的支援欄位,但只能透過屬性的 getset 存取子才能存取。 在 c # 9 和更新版本中, init 存取子也可以宣告為自動執行的屬性。

範例

下列範例示範一個簡單的類別,其中包含一些自動實作的屬性:

// This class is mutable. Its data can be modified from
// outside the class.
class Customer
{
    // Auto-implemented 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;
    }
}

您無法在介面中宣告自動實作為屬性。 自動執行的屬性會宣告私用實例支援欄位,而介面可能不會宣告實例欄位。 在介面中宣告未定義主體的屬性,會宣告具有存取子的屬性,這些存取子必須由每個實該介面的型別來執行。

在 C# 6 及更新版本中,您可以初始化自動實作的屬性,就像欄位一樣:

public string FirstName { get; set; } = "Jane";  

先前範例中顯示的類別可變動。 用戶端程式代碼可以在建立之後變更物件中的值。 在包含顯著行為 (方法) 和資料的複雜類別中,通常需要有公用屬性。 不過,對於只封裝一組值的小型類別或結構 (資料) 而且有很少或沒有的行為,您應該使用下列其中一個選項來使物件變得不可變:

  • get除了) 的函式以外,在所有位置都只宣告存取子 (不可變。
  • 宣告 get 存取子和 init 存取子 (不可變的任何地方,但在物件結構) 期間除外。
  • 將存取子宣告 set 用 (對取用者) 不可變。

如需詳細資訊,請參閱 如何使用自動執行的屬性來執行輕量類別

另請參閱