プロパティ( Accessor )


[attributes] [modifiers] type identifier {accessor-declaration} 要は, VarMem 名を指定するだけで, 値を参照. セットできる. プロパティとは、暗黙のアクセッサメソッド。 通常のメンバにアクセスするように見せかけ、内部ではメソッドを通してくれる。 そのクラスを利用するプログラマはアクセッサメソッドを意識せずにメンバにアクセスできる。 accessor-declaration には、プロパティのアクセッサを宣言する。 このアクセッサがプロパティの本体であり、暗黙のアクセッサメソッドとなる。 アクセッサに対する代入行為があった場合、暗黙的に set アクセッサが呼ばれる。 set アクセッサは、void 型の戻値でプロパティ型のパラメータを一つ持っているメソッドと同じ。 代入された暗黙的な値は、常に value という名前を持つ。 代入以外の形でプロパティが参照された場合は get アクセッサが呼び出されます get アクセッサはプロパティ方の戻りとを持つ引数なしのメソッドと同じ。 POINT MSIL レベルでは「プロパティ」という概念は存在しない。 プロパティはコンパイル時にアクセッサメソッドに変換されている。 プロパティをオーバーライドするということも可能 ただし、この時はアクセッサレベルではなくプロパティレベルでオーバーライドされるので set アクセッサをオーバーライドした場合は、get アクセッサもオーバーライドされます メンバ変数を変更されたくないということもあるでしょう set アクセッサを省略することで読み取り専用プロパティを作れます class StringTest { private string strName; // [Strname] が set/get する際の名前. public string StrName { get { System.Console.WriteLine("strName を要求"); return strName; } set { System.Console.WriteLine(value + "を設定"); strName = value; } } } class Client { static void Main() { Kitty obj = new StringTest(); obj.StrName = "test"; string str = obj.StrName; } }