C#のプロパティ

プロパティはオブジェクトのフィールドを読み取りあるいは書き込みなどを行う機能です。

安全性や柔軟性のためにフィールドをプライベートにして外部から隠蔽して、
読み書きはメソッドを通して行うという方法は一般的によく使われています。
読み取るためのメソッドをgetter、書き込むためのメソッドをsetterと呼び、
この二つのメソッドをアクセサーと呼びます。

アクセサーの定義例

class Test {
    private int hoge;
    
    public void setHoge(int value)
    {
        hoge = value;
    }
    
    public int getHoge()
    {
        return hoge;
    }
}

プロパティの使用例

C#ではプロパティによってアクセサーをより簡易的に扱えます。

上記の例を、プロパティを使って記述した例が以下になります。

class Test {
    private int hoge;
    
    public int Hoge
    {
        get { return hoge; }
        set { hoge = value; }
    }
}

上記で定義した、プロパティを使用する例が以下になります。

Test t = new Test();
// hogeに値を設定する
t.Hoge = 10;
// hogeの値を取得する
int i = t.Hoge;

このように、プロパティはパブリックフィールドにように扱えます。

読み取り専用プロパティ

プロパティのgetアクセサー と setアクセサー は両方記述する必要はありません。
そのため、getアクセサーだけを記述した読み取り専用のプロパティを作ることが出来ます。

class Test {
    private int hoge;
    
    public int Hoge
    {
        get { return hoge; }
    }
}

読み取り専用のプロパティに値を書き込もうとするとコンパイルエラーになります。

Test t = new Test();
// hogeに値を設定するしようとするとコンパイルエラー
t.Hoge = 10;

自動実装プロパティ

C#3.0から自動実装プロパティという機能によりプロパティをより簡潔に記述することが出来るようになりました。

自動実装プロパティの定義例は以下になります。

class Test {
    public int Hoge { get; set; }
}

このように、ただ値を読み書きするだけのアクセサーは実装を書くことなく定義することが出来ます。


inserted by FC2 system