読者です 読者をやめる 読者になる 読者になる

P35 アクセッサとプロパティ

C#以前からある良いとされる習慣の1つに、
「クラスの持つデータは必ずメソッドを通じて返せ。フィールドは公開するな」
というものが存在する。(実際は宗教戦争になりうる内容であるが)
メソッドを通す事でのメリットは以下の様なことが挙げられる。
・実装方法を選べる
・単純なデータの読み書きだけでなく、追加の処理を挟める
・実装方法を後から変えても、クラス利用側への影響が出にくい
・virtualにすることで、派生クラスで挙動を変更できる

通常、Javaと一緒でC#もアクセッサを実装しなければならない。
そこで、C#ではプロパティという構文が用意されており、
宣言は行わないといけないが、利用する際にはフィールドにアクセスする感覚でアクセスできる。
なお、C#2.0からは、getだけpublicにして、setをprivateにする事ができる様になった。

【プロパティ宣言方法】

private int _x;
public int X
{
    get {return _x;}
    private set {_x = value;}
}

【プロパティ利用方法】

s.X += 1;


ただ、結局宣言しないといけないという煩わしさは変わらないわけである。
そこで、C#3.0らは自動プロパティという機能が実装された。
(何故Javaには未だに実装されないのであろうが…)
また、自動プロパティは、アクセス制限も行う事ができる。

public int X {get; private set;}