プロパティにアクセスするためにオブジェクトを実際にインスタンス化せずに、プロパティ名にアクセスするための「タイプセーフ」な方法が必要な要件があります。例を挙げると、IMyObjectのリストと、プロパティ名(IMyObjectに存在するプロパティ)を表す文字列を引数として取るメソッドについて考えてみます。
メソッドの実装はリストを取得し、渡されたプロパティ名を使用してリスト内のすべてのオブジェクトにアクセスします...何らかの理由で、私たちはそれにこだわるつもりはありません!!
これで、インスタンス化されたオブジェクトを使用してこれを実行できることがわかりました...
Dim x as MyObject = nothing
Dim prop As PropertyInfo = PropHelper.GetProperty(Of MyObject)(Function() x.MyProperty)
私のヘルパーメソッドがリフレクションを使用してプロパティの名前を文字列として取得する場合、これがWeb上を飛び回る例は数多くあります。
しかし、私はこの無意味なオブジェクトを作成する必要はありません。MyObject.MyPropertyのようなことをしたいだけです!リフレクションを使用すると、その型のオブジェクトを宣言せずに型のプロパティとメソッドを反復処理できます...しかし、特定のプロパティにアクセスして、反復せずに、その型のオブジェクトを宣言せずに、その名前の文字列バージョンを取得したいと思います。
ここでの主なポイントは、プロパティ名を文字列として取得しようとしていますが...これは実行時に行われます...コンパイル時に、これをタイプセーフにしたいので、誰かがプロパティ名を変更した場合、コンパイルが壊れます。
誰かがこのクエストを手伝ってくれる?!?!