【C#入門】カプセル化(プロパティ)について分かりやすいサンプルコードで徹底解説①

データの破壊や漏洩を防ぐというのは、オブジェクト志向の重要な目的の一つです。
そのためにはオブジェクトの中でデータを隠蔽し、最低限のアクセス手段のみを公開する「カピセル化」を実装する必要があります。
今回はプロパティについて紹介します。

プロパティ

フィールドや定をprivateにすることで、クラス外部からは容易にアクセスできないようにカプセル化することができます。

publicと違ってprivateにすることでmainメソッドで作成したインスタンスに
アクセスできなくなってしまいます。
このように、隠蔽されたデータにアクセスする場合には、「プロパティ」を使います。

アクセサー

プロパティは次の構文のように、getアクセサーとsetアクセサーを使ってフィールドの値にアクセスします。

プロパティのアクセス修飾子は一般にpublicです。getで始まるブロックを「get アクセサー」setで始まるブロックを「setアクセサー」と呼びます。setアクセサーに記述されている「value」は、プロパティをとおしてフィールドに代入される値 です。このvalueは宣言なしに使用することができ、常にこの名前で用います。

プロパティの定義

フィールドのchannelとvolumeは上下限値が決まっています。
アクセサーでチェックして、その範囲内のvalueのみフィールドに代入するようにしています。

main側も修正します。

プロバティは、オブジェクトを使用する側からはフィールドのように見えますが、クラスを実装する側ではメソッドのように振る舞います。
なお、getアクセサーとset アクセサーには異なるアクセスレベルを指定でき、Setの前にprivateを書くと外からセットできないフィールドになります。
setアクセサーを実装せずに読み取り専用のプロパティにすることもできます。通常、テレビの電源と音量を外部から直接指定することはありませんね。ですから、TelevisionクラスのPowerと Volumeは、次のように読み取り専用のプロパティに書き換えます。

自動実装プロパティを宣言すると、コンパイル時にフィールドが内部に自動的に作成されるので、プログラムにフィールドを記述する必要がなくなります。もし、値の取得のみを行いたい場合には、次のようにsetの前にprivateを付けて外部からはsetができないようにしてください。

Writer
壷井

壷井

株式会社flyhawkの壷井です。フライテックメディア事業部でのメディア運営・ライター業務なども担当。愛機はMac Book AirとThinkPad。好きな言語:swift、JS系(Node.js等)。好きなサーバー:AWS。受託開発やプログラミングスクールの運営をしております。ご気軽にお問い合わせください。

最新の案件情報

フリーランスエンジニアの案件探し