分享方式:


自動實作的屬性

當屬性存取子中不需要其他邏輯時,自動實作屬性會使屬性宣告更加簡潔。 它們還可讓用戶端程式碼建立物件。 當您宣告屬性時,如下列範例所示,編譯器會建立私用、匿名的支援欄位,但只能透過屬性的 getset 存取子才能存取。 init 存取子也可以宣告為自動實作的屬性。

範例

下列範例顯示具有一些自動實作屬性的簡單類別:

// This class is mutable. Its data can be modified from
// outside the class.
public 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()
    {
        // Initialize a new object.
        Customer cust1 = new Customer(4987.63, "Northwind", 90108);

        // Modify a property.
        cust1.TotalPurchases += 499.99;
    }
}

您無法在介面中宣告自動實作的屬性。 自動實作的屬性會宣告私用實例備份欄位,而且介面無法宣告實例欄位。 若在介面中宣告屬性但未定義主體,則會宣告具有存取子的屬性,而這些存取子必須由實作該介面的各個類型進行實作。

您可以初始化自動實作的屬性,類似於欄位:

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

先前範例中顯示的類別可變動。 用戶端程式碼可以在物件建立後變更物件中的值。 複雜類別如果包含重要行為 (方法) 和資料,通常需要具有公用屬性。 不過,如果是只會封裝一組值 (資料) 且只有很少或沒有任何行為的小型類別或結構,您應使用下列任一選項來讓物件變成不可變動:

  • 只宣告 get 存取子 (在建構函式以外的所有位置皆不可變)。
  • 宣告 get 存取子及 init 存取子 (除了在物件建構期間以外,在所有位置皆不可變)。
  • set 存取子宣告為 private (對取用者而言不可變)。

如需詳細資訊,請參閱 如何使用自動實作的屬性來實作輕量型類別。

另請參閱