次の方法で共有


自動的に実装されるプロパティ

自動的に実装されるプロパティは、プロパティ アクセサーで他のロジックが必要ない場合に、プロパティ宣言をより簡潔にします。 これにより、クライアント コードでオブジェクトを作成することも可能になります。 次の例に示すようにプロパティを宣言する場合、コンパイラによって、プロパティの get および set アクセサーを介してのみアクセスできる、プライベートの匿名バッキング フィールドが作成されます。 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 アクセサーをプライベートとして宣言します (コンシューマーには変更できません)。

詳細については、「自動的に実装されるプロパティを使用して軽量クラスを実装する方法」を参照してください

関連項目