2016-12-29 5 views
3

は私がTypeFieldInfo、およびMethodInfoについては、以下の.NET型と機能を見てきました:.NET RuntimePropertyHandleおよびPropertyInfo.GetPropertyFromHandleが存在しないのはなぜですか?

RuntimeTypeHandle th = ...; 
Type t = Type.GetTypeFromHandle(th); 

RuntimeFieldHandle fh = ...; 
FieldInfo f = FieldInfo.GetFieldFromHandle(fh); 

RuntimeMethodHandle mh = ...; 
MethodInfo m = MethodBase.GetMethodFromHandle(mh); 

しかし、プロパティの対応するハンドルタイプとGet...FromHandleがあるように表示されません。私は見ていない人がいるのですか、それとも存在しない理由がありますか?

私はすでに私が興味プロパティのプロパティトークンへのアクセス権を持っているときType.GetPropertyを使用してPropertyInfoをルックアップするために持っていることは非常に非効率です。

+0

ハンドルとトークンはどこで手に入りますか?それは重要ではなく、ちょうど興味があります。 – IllidanS4

+0

@ジェームズあなたが取得したため... FromHandleのファイルとメソッドとプロパティとイベントが提出され、メソッドです。メタデータにはC#のようなプロパティはありません。 –

答えて

1

coreclrとして表示、プロパティおよびイベントは何の取っ手を持っていないのでノーRuntime...HandleまたはGet...FromHandleです。 「ハンドル」を考えることは、そのコンテキストにおいて単に無効です。

なぜ、私は、プロパティとイベントは純粋にメタデータのものであると推測しますが、メソッドとフィールドははるかに多くあります。メソッド、フィールド、およびタイプにアクセスするためのCILオペコードがありますが、プロパティやイベントはありません。それらを使用すると、それぞれのアクセサメソッドの1つとしてCILにコンパイルされます。文字通り、ランタイムのメタデータの一部に過ぎないので、ハンドルは必要ありません。

私は自分自身でsimilar questionと尋ねましたが、プロパティとイベントの解決方法は実際には限られています。あなたの根本的な質問については、私はすべてのプロパティを列挙し、GetPropertyを使用するよりも効率的かもしれないが、MetadataTokenを探していると思いますが、むしろそれをテストしたいと思います。

関連する問題