【C#】アクセサーとプロパティ
クラスで使用されるプロパティとアクセサーの基本的なことをまとめました。
言語はC#を使用しています。
アクセサーとは
フィールド設定・取得専用の処理
高橋 麻奈(2016).やさしいC# 第2版 SBクリエイティブ
クラス内でprivateで宣言された変数(フィールド)の値を外部から取得・設定するための処理(メソッド)をアクセサー(accessor)と言います。
外部からのフィールドへのアクセスを、アクセサーを通してのみに制限することで、カプセル化を実現します。
アクセサーの記述例
定義例
class Poster
{
//フィールド
// アクセス修飾子 型名 変数名;
int height; //アクセス修飾子省略時はprivateが設定される
//アクセサーを記述
public int GetHeight()
{
//値の参照時に実施する処理を記述
return height;
}
public void SetHeight(int height)
{
//値の代入時に実施する処理を記述
this.height = height;
}
//~~~省略~~~
}
使用例
class Sample
{
public static void Main()
{
Poster p = new Poster();
p.SetHeight(100);
Console.WriteLine(p.GetHeight); //100
}
}
プロパティとは
setとgetという名前のフィールド設定・取得専用の処理を用意しておくしくみ
高橋 麻奈(2016).やさしいC# 第2版 SBクリエイティブ
C#では、プロパティと呼ばれるアクセサーに対応したメンバーを使用できます。プロパティを使用すると、privateで宣言されたフィールドの値の取得や設定を行う手段を外部に提供できます。
髙江 賢(2018).基礎からしっかり学ぶC#の教科書 日経BP社
「アクセサーに対応した、フィールド設定・取得専用のメンバー」です。
プロパティを使用すると、特に利用する側(呼び出す側)の記述がよりシンプルになります。
以下の記述例で、先ほどのアクセサー部分をプロパティを使用した形に書き換えてみます。
プロパティの記述例
定義例
class Poster
{
//フィールド
// アクセス修飾子 型名 変数名;
int height; //アクセス修飾子省略時はprivateが設定される
//プロパティを定義
public int Height
{
set
{
//値の代入時に実施する処理を記述
this.height = value;
}
get
{
//値の参照時に実施する処理を記述
return height;
}
}
//~~~省略~~~
}
使用例
class Sample
{
public static void Main()
{
Poster p = new Poster();
p.Height = 100;
Console.WriteLine( p.Height ); //100
}
}
【補足】
プロパティのsetアクセサー内の「value」は、利用する側から渡される値を格納することができます。「value」は自動で定義されたパラメーターであり、使用前の宣言は不要です。
C# 2.0以降は、プロパティのsetとgetに異なるアクセスレベル(アクセス修飾子)を設定できます。
自動プロパティ(C# 3.0)
単純な値の設定と取得のみであれば、フィールドの宣言とプロパティの定義方法を簡略化し、下記のように記述できます。
記述例
class Poster
{
public int Height { get; set; }
//~~~省略~~~
}
プロパティの定義のみで、フィールドの宣言をしていませんが、この記述でコンパイル時に自動で内部にフィールドが作成されます。
自動作成されるフィールドの型は、 プロパティで定義した型となります。
また、自動作成されたフィールドにはプロパティのアクセサーを介してのみアクセスが可能です。
プロパティ定義数が多い際に、コードの冗長さが軽減できます。