自動実装プロパティとは?初期値の設定も含め解説(C#)

  • このエントリーをはてなブックマークに追加

スポンサーリンク

※サイト運営にサーバーは必須です※
~このサイトもエックスサーバーを使用しています~

自動実装プロパティとは

自動実装プロパティは、以下のような形で記述されます。

データ型 プロパティ名 {get; set;}

 

以下のようにフィールドとプロパティが記述されたコードがあった場合を考えます。

private int _num;
public int Num
{
  get { return _num; }
  set { _num = value; }
}

自動実装プロパティがあった場合、以下のように簡潔に書くことができます。

public int Num { get; set; }

自動実装プロパティを使えば、値を格納するためのフィールドを明示的に用意する必要がなくなります。(この場合、_numに相当するフィールドを明示的に宣言する必要がありません)

ここで、勘違いして欲しくない点として、プロパティ自体に値が格納されているわけではありません。

あくまで、プロパティは値をやり取りする際の窓口でしかありません。

では、値はどこに格納されるでしょうか?

正解は、「バッキングフィールド」に格納されます。

「バッキングフィールド」は、自動実装プロパティを用意した際に、自動実装されるフィールドです。

バッキングフィールドをプロパティ以外の手段でアクセスすることはできません。

※Visual Studioを使っている場合、prop+「Tab」+「Tab」と打つと、以下のコードが素早く書けます(コードスニペット)。自動実装を頻繁に使うのなら、知っておくと便利です。

public int MyProperty { get; set; }

ソースコード

実行結果

20

初期値設定

C#6.0から自動実装プロパティに対して、初期値を設定できるようになりました。

データ型 プロパティ名 {get; set;}=値;

public int MyProperty { get; set; } = 10;

自動実装プロパティの注意点

通常のプロパティを記述する場合は、getアクセサーとsetアクセサーの片方のみの記述が許されています。

しかし、自動実装プロパティの場合getアクセサーを省略することはできません。(getアクセサーのみは可能、setアクセサーのみは不可能)

※もし仮に、setアクセサーで値を設定できたとしても、getアクセサーがないと、バッキングフィールドから値を取り出せない。

getアクセサーのみあるプロパティを一度作った場合、読み取り専用プロパティとして振舞うので、初期値の設定以降は値の変更が不可能に見えます。しかし、実は、コンストラクターでの初期化は有効です。

ソースコード

実行結果

5
30

プロパティNumに対して、初期の値を5と設定しています。

しかし、インスタンス化の際に、コンストラクターを通して、Numに対して値を入れることが可能です。

~プログラミングを勉強してみませんか?~

TechAcademy [テックアカデミー] 無料の体験講座が用意されているので、気軽に体験できます。

※私(サイト主)も無料体験講座を実際に受けてみました(→感想)

     

コメントを残す

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)