プロパティ

スポンサーリンク

プロパティ

プロパティ (property) は,フィールドの getter や setter を定義するために利用できる言語機能です。
フィールドのような取り扱いができる簡易的なメソッドとも説明できます。

次のプログラムは,温度を表すクラス Temperature を定義したものです。
2 つのプロパティ Celsius, Fahrenheit を定義しています。

using System;

// 温度を表す
class Temperature
{
    private double celsius;

    // 温度を摂氏で取得・設定するプロパティ
    public double Celsius
    {
        get { return celsius; }
        set { celsius = value; }
    }

    // 温度を華氏で取得・設定するプロパティ
    public couble Fahrenheit
    {
        get { return 9 * celsius / 5 + 32; }
        set { celsius = 5 * (value - 32) / 9; }
    }
}

class Program
{
    static void Main()
    {
        Temperature temp = new Temperature();
        temp.Celsius = 22;
        Console.WriteLine(temp.Fahrenheit);
    }
}
71.6

Temperature クラスのメンバは,1 つのフィールドと 2 つのプロパティです。
フィールドは celsius であり,プロパティは Celsius, Fahrenheit です。

プロパティは,値の取得を記述する get アクセサと,値の設定を記述する set アクセサからなります。
get アクセサには,メソッドと同じように return 文を書きます。
set アクセサでは,暗黙のパラメータ value を使うことができます。

get アクセサ,set アクセサには,それぞれ別々のアクセス修飾子を指定することも可能です。
次のように set アクセサだけ private にすることで,読み取り専用プロパティを定義できます。

class Temperature
{
    private double celsius;

    public double Celsius
    {
        get { return celsius; }
        private set { celsius = value; }
    }
}

自動実装プロパティ

次のように定義した Celsius プロパティは,コンパイラが自動的に各アクセサを実装します。

class Temperature
{
    public double Celsius { get; set; }

    public couble Fahrenheit
    {
        get { return 9 * Celsius / 5 + 32; }
        set { Celsius = 5 * (value - 32) / 9; }
    }
}

自動実装プロパティを利用したこの例は,以下のコードと実質的に同じです。

class Temperature
{
    private double celsius;

    public double Celsius
    {
        get { return celsius; }
        set { celsius = value; }
    }

    public couble Fahrenheit
    {
        get { return 9 * Celsius / 5 + 32; }
        set { Celsius = 5 * (value - 32) / 9; }
    }
}
スポンサーリンク