次の方法で共有


読み取り書き込みプロパティを宣言して使用する方法 (C# プログラミング ガイド)

プロパティは、オブジェクトのデータへの保護されていない、制御されていない、および確認されていないアクセスに伴うリスクを伴わない、パブリック データ メンバーの利便性を提供します。 プロパティ アクセサー宣言します。基になるデータ メンバーに値を割り当てて取得する特殊なメソッドです。 セット アクセサーを使用すると、データ メンバーを割り当て、はアクセサー 取得してデータ メンバーの値を取得できます。

このサンプルでは、Person (文字列) と Name (int) の 2 つのプロパティを持つ Age クラスを示します。 どちらのプロパティも get アクセサーと set アクセサーを提供するため、読み取り/書き込みプロパティと見なされます。

class Person
{
    private string _name = "N/A";
    private int _age = 0;

    // Declare a Name property of type string:
    public string Name
    {
        get
        {
            return _name;
        }
        set
        {
            _name = value;
        }
    }

    // Declare an Age property of type int:
    public int Age
    {
        get
        {
            return _age;
        }

        set
        {
            _age = value;
        }
    }

    public override string ToString()
    {
        return "Name = " + Name + ", Age = " + Age;
    }
}

public class Wrapper
{
    private string _name = "N/A";
    public string Name
    {
        get
        {
            return _name;
        }
        private set
        {
            _name = value;
        }
    }

}

class TestPerson
{
    static void Main()
    {
        // Create a new Person object:
        Person person = new Person();

        // Print out the name and the age associated with the person:
        Console.WriteLine($"Person details - {person}");

        // Set some values on the person object:
        person.Name = "Joe";
        person.Age = 99;
        Console.WriteLine($"Person details - {person}");

        // Increment the Age property:
        person.Age += 1;
        Console.WriteLine($"Person details - {person}");

        // Keep the console window open in debug mode.
        Console.WriteLine("Press any key to exit.");
        Console.ReadKey();
    }
}
/* Output:
    Person details - Name = N/A, Age = 0
    Person details - Name = Joe, Age = 99
    Person details - Name = Joe, Age = 100
*/

堅牢なプログラミング

前の例では、Name プロパティと Age プロパティはパブリック され、getset アクセサーの両方が含まれています。 パブリック アクセサーを使用すると、任意のオブジェクトでこれらのプロパティの読み取りと書き込みを行えます。 ただし、アクセサーの 1 つを除外することが望ましい場合があります。 プロパティを読み取り専用にするには、set アクセサーを省略できます。

public string Name
{
    get
    {
        return _name;
    }
    private set
    {
        _name = value;
    }
}

または、1 つのアクセサーをパブリックに公開し、もう一方のアクセサーをプライベートまたは保護することもできます。 詳細については、「非対称アクセサーのアクセシビリティ 」を参照してください。

プロパティが宣言されたら、クラスのフィールドとして使用できます。 プロパティを使用すると、次のステートメントのように、プロパティの値を取得および設定するときに自然な構文を使用できます。

person.Name = "Joe";
person.Age = 99;

プロパティ set メソッドでは、特殊な value 変数を使用できます。 この変数には、ユーザーが指定した値が含まれています。次に例を示します。

_name = value;

Person オブジェクトの Age プロパティをインクリメントするためのクリーンな構文に注目してください。

person.Age += 1;

個別の set メソッドと get メソッドを使用してプロパティをモデル化した場合、同等のコードは次のようになります。

person.SetAge(person.GetAge() + 1);

ToString メソッドは、次の例でオーバーライドされます。

public override string ToString()
{
    return "Name = " + Name + ", Age = " + Age;
}

ToString がプログラムで明示的に使用されていないことに注意してください。 既定では、WriteLine 呼び出しによって呼び出されます。

こちらもご覧ください