自動実装するプロパティ (C# プログラミング ガイド)Auto-Implemented Properties (C# Programming Guide)

C# 3.0 以降では、自動実装プロパティを使用することで、プロパティ アクセサーに追加のロジックが必要ない場合は、プロパティをより簡潔に宣言できます。In C# 3.0 and later, auto-implemented properties make property-declaration more concise when no additional logic is required in the property accessors. これにより、クライアント コードでオブジェクトを作成することも可能になります。They also enable client code to create objects. 次の例に示すようにプロパティを宣言する場合、コンパイラによって、プロパティの get および set アクセサーを介してのみアクセスできる、プライベートの匿名バッキング フィールドが作成されます。When you declare a property as shown in the following example, the compiler creates a private, anonymous backing field that can only be accessed through the property's get and set accessors.

Example

次の例に、自動実装プロパティを持つ簡単なクラスを示します。The following example shows a simple class that has some auto-implemented properties:


// 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;
    }
}

C# 6 以降では、フィールドと同様に自動実装プロパティを初期化することができます。In C# 6 and later, you can initialize auto-implemented properties similarly to fields:

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

前の例に示したクラスは、変更可能です。The class that is shown in the previous example is mutable. クライアント コードは、オブジェクト内の値を作成後に変更できます。Client code can change the values in objects after they are created. データだけでなく、重要な動作 (メソッド) も含まれる複雑なクラスでは、多くの場合、パブリック プロパティが必要です。In complex classes that contain significant behavior (methods) as well as data, it is often necessary to have public properties. ただし、値 (データ) のセットをカプセル化しているだけで、動作をほとんど、またはまったく含まない小さなクラスや構造体の場合は、set アクセサーを private (コンシューマーからは変更できない) として宣言するか、または get アクセサー (コンストラクターを除くすべての場所で変更できない) のみを宣言することで、オブジェクトを変更不可能にする必要があります。However, for small classes or structs that just encapsulate a set of values (data) and have little or no behaviors, you should either make the objects immutable by declaring the set accessor as private (immutable to consumers) or by declaring only a get accessor (immutable everywhere except the constructor). 詳細については、「方法: 自動実装するプロパティを使用して簡易クラスを実装する」を参照してください。For more information, see How to: Implement a Lightweight Class with Auto-Implemented Properties.

属性は、自動実装プロパティでは使用できますが、ソース コードからアクセスできないバッキング フィールドでは、当然使用できません。Attributes are permitted on auto-implemented properties but obviously not on the backing fields since those are not accessible from your source code. プロパティのバッキング フィールドで属性を使用する必要がある場合は、標準プロパティを作成してください。If you must use an attribute on the backing field of a property, just create a regular property.

関連項目See Also

プロパティProperties
修飾子Modifiers