C#におけるプロパティ(setter/getter)の使い方についてソースコード付きでまとめました。
## 【はじめに】アクセサー
privateで隠蔽されたメンバー変数は、クラス外部から直接アクセスできません。
そのため、メンバー変数にアクセスして値を変更したり取り出すときは、それ用にpublicなメソッドを作成し、それを通して行うのが一般的です。
メンバー変数の値を取得したり書き換えるメソッドをアクセサー(accessor)といいます。
ただし、アクセサーを作っていくと上記のように、メンバー変数の数だけアクセサーを用意することになり、冗長なコードとなってしまいます。
## 【プロパティ】Getter/Setterの使い方
先程も述べたとおり、アクセサーを作っていくと冗長なコードとなってしまいます。
そこで、 C#ではクラス内部から見るとメソッドのように振る舞い、クラスの外部(利用側)から見るとメンバー変数のように振舞うプロパティという機能があります。
先程と同じアクセサーをプロパティで書くと以下のようになり、冗長なコードがかなり緩和されます。
このコードで実装し、あとからSumクラスの中身を修正しても、クラス利用側のコードに手を加える必要は一切ありません。
## 【自動プロパティ】Getter/Setterの省略
C# 3.0 以降では、プロパティ(get/set)の中身を次のように省略できる、自動プロパティ(auto-property, auto-implemented property)機能が使えます。
※get;だけ書くと、外部からは取得オンリー(書き換え不可)になります。
## 【自動プロパティ】初期化子
C# 6.0以降では、自動プロパティに対して初期値を与えられます。
## 【プロパティ】expression-bodiedで記述
読み込み専用[getだけ]のプロパティはexpression-bodied (本体が式の)形式で記述可能です。
コメント