プログラミング 基礎(復習)
プロパティとは
メンバ変数の値の取得や変更を行うためのメソッド(アクセサー)のこと
メンバ変数へのクラス外部から直接アクセスできるようにすることは
オブジェクトの状態が不正な値に書き換えられエラーになることや、その
メンバ変数が絡んだ修正が入った時にオブジェクトの値を利用する側のクラスの修正量が
増えてしまったりするリスクがある。
↓
そのため、メンバ変数は基本的にそのクラス内だけで利用し外部クラスから
直接アクセスできない状態にして、メンバ変数とのやりとりはメソッドを
活用するようにする事が望ましい
活用するための準備 基本
・get{}set{}だけでひとかたまりで記述できる
・利用者側のクラスでは、変数に直接アクセスしているかのように
「インスタンス.プロパティ名」だけで値のやりとりができるようになるのが利点
プロパティを記述するクラスでは、
アクセスレベル型 プロパティ名{}で宣言し、その中にset{}get{}を記述
set{}の中には「メンバ変数 = value」と記述。
valueは利用者側のクラスで代入された値が格納される予約語
get{}の中には「return メンバ変数」戻り値を指定する形になる
活用するため 基本
準備が完了後、
利用者側のクラスでインスタンスを生成し、値の取得時は
「インスタンス名.プロパティ名」で
get{}を呼び出し、
「インスタンス名.プロパティ名 = 値」で
set{}を呼び出す
これを扱うと、
プロパティを記述するクラスでは、メソッドとして
扱うことができ、
利用者側のクラスではメンバ変数のように
扱うことができる
省略系
{set; get;}の記述のみでも上記と同じ意味になる
★アクセスレベルについて
set{},get{}のアクセスレベルを変更できる
public property{ protected set; get;}と記述すると、
set{}をprotectedにしたので、利用者側ではアクセスできなくなる。
get{}はデフォルトのpublicなので、アクセスが可能
★get-onlyについて
set{}を記述しない書き方
get-onlyにすると、コンストラクタでのみ
値を代入できるようになり、以降は変更不可となる。
https://www.sejuku.net/blog/102827
プロパティの活用
●細かい疑問点
■自動実装プロパティとpublicフィールドの違い
・外部から扱う場合、特に違いなし
・自動プロパティが有用な点(get,setで異なるアクセスレベルを設定可能になる)
■プロパティとメソッドの違い
メソッドは操作を表し、プロパティはデータを表す
例え:
「人」オブジェクトがあれば、
「名前」や「性別」はデータ
「歩け」や「走れ」といった操作(動作)はメソッド
■フィールドとプロパティの差
・フィールドはクラスのメンバ変数
・プロパティはpropertyの構文で作られた変数
違い:
後者はアクセス権や範囲チェックなどの検証ロジックが
必要になるため、低速になる