C# の自動実装プロパティの仕組み

C# 3.0 以降では自動実装プロパティ (auto-implemented properties) が導入されました。

それについては「C# の自動実装プロパティ」で説明しました。

とても便利な機能です。

便利はいいのですが、どこにデータが保存されるのかわからなくて、気持ち悪い、という風に感じられる方もいらっしゃるのではないでしょうか。

ここではそうした疑問に答えるべく、自動実装プロパティを用いた場合、内部でどのようにプロパティが実装されるのか確認しましょう。

自動的にバッキングフィールドが作成される

ひとことでいうと、自動実装プロパティを用いた場合、自動的にバッキングフィールドが作成されます

自動実装プロパティ」に書いた Person クラスを例にとると、 Person クラス内にはプライベートのバッキングフィールドが二つ作成されて、プロパティ(メソッド)を通して、それらに値をセットしたり、 値を取得できたりできるようになります。

ためしに ILDasm で Person クラスを見ると、次のようにフィールドが作成されていることが確認できます。

自動実装プロパティ

読み取り専用とした場合は、set メソッドが private 指定となる

また、private を付けてプロパティを読み取り専用とした場合は、いったいどのようになるのでしょうか。

こちらも ILDasm でコードを覗くと分かります。

読み取り、書き込み可能な場合は次のように、set メソッドが public 指定されています。

自動実装プロパティ

しかし、private をつけると、set メソッドが private 指定となります。

自動実装プロパティ

このため書き込み用のメソッドである set メソッドに外部からアクセスすることができないので、自動実装プロパティが読み取り専用となるわけです。

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 C# 入門