0.0 はじめに
C#でのプロパティの書き方と使い方を記載します。
以下はプロパティに関する基礎知識です。
- C#のクラスは「フィールド」と「メソッド」で構成されてます。
- フィールドは変数の定義する場所であり、データの格納する場所です。「メンバ変数」とも呼ばれます。
- カプセル化などクラス外部から直接アクセスを防ぐには、メンバ変数にprivateアクセス修飾子を付けます。このメンバ変数の値を変更したり取り出すときは、外部からのアクセス用にpublicアクセス修飾子を付けたメソッド、setter(セッター)やgetter(ゲッター)を作成し、それを通して行うのが他の言語では一般的です。
- setter(セッター)やgetter(ゲッター)をアクセッサと呼んでいます。
- C#ではプロパティと言う便利なものがあり、このプロパティはクラス外部からはメンバ変数のように使え、クラス内部から見るとメソッドのように使うことができます。
1.0 プロパティの書き方
1.1 ゲッター(getter)とセッター(setter)と呼ばれるアクセッサを使う場合
privateな変数を定義して、その変数に他のクラスからもアクセスするためのプロパティをつくります。
プロパティではgetterを通して値を返し、setterではvalue変数を介して値を受け取ります。
ちなみにプロパティでgetterを省くと値の取得不可、setterを省くと代入不可となります。
プロパティの変数名は、定義されているprivateな変数と区別するために同じ名前で大文字始まりにするのが一般的です。
private string myName; // メンバ変数
// プロパティ
public string MyName {
get { return myName; } // getterの部分
set { myName = value; } // setterの部分
}
1.2 条件付きプロパティ(条件付きで代入・取得する)
プロパティ内のgetter、setterにて条件を付けられます。
private int height; // メンバ変数
public int Height {
get { return height; } // getterの部分
set { if(value > 100) // setterの部分、100を超えたときのみ代入する
height = value; }
}
2.0 取得方法
クラスの外からは human.Height や human.Height = 150 というかんじでメンバ変数のように使えます。
// HumanからTestクラスの変数heightにアクセスする
public class Human :MonoBehaviour
{
void Start()
{
Human human = new Human();
human.Height = 150; // Heightで設定
Debug.Log(human.Height); // Heightで取得
}
}
3.0 自動実装プロパティ(自動プロパティ宣言)
以下のように短縮して記述することもできます。ただし、カプセル化などクラス外部から直接アクセスを防ぐ目的でプロパティを使っているので自動実装プロパティをそのまま使うのは少し疑問です。
// プロパティ
public int Age { get; set; }
// プロパティ
public int Age { get; set; } = 16;
ちなみに調べると自動実装プロパティC# 3.0以降、初期値設定はC# 6.0から使えるようになったようです。(C# 6.0でもVisual Studio 2015と同じ時期ですから気にする必要ないと思います。)
4.0 入力ショートカット
ショートカットというか予測変換です。コードスニペットと言われるようです。
4.1 自動実装プロパティ
propと入力してTabキーを2回押すと下記のコードが自動生成されます。
public int MyProperty { get; set; }
4.1 アクセッサ含みのプロパティ
propf(propfullの略)と入力してTabキーを2回押すと下記のコードが自動生成されます。
private int myVar;
public int MyProperty {
get { return myVar; }
set { myVar = value; }
}
5.0 クイックアクションの使用
フィールド変数を定義してその上で右クリック、**クイックアクションと....**を選ぶとフィールドのカプセル化が選択できます。