私の反射的なC#コードでは、インターフェイスのメソッドを反復処理し、a)インターフェイスを実装すると宣言されたクラスを発行します。b)すべてのメソッドが実装されています。GetMethods()
が返されます。.NET .NETでは、インターフェイスのプロパティとイベントをメソッドとして直接実装することは可能ですか?
var methods = typeof(T).GetMethods(); // T is interface
foreach (var methodInfo in methods)
{
var parameters = methodInfo.GetParameters().Select(p => p.ParameterType).ToArray();
var method = typeBuilder.DefineMethod(
methodInfo.Name,
MethodAttributes.Public | MethodAttributes.Virtual,
methodInfo.ReturnType,
parameters);
... // Emit IL
これは、方法だけでなく、方法(get_メソッドSET_/ADD_ remove_)のペアとしてプロパティおよびイベントだけでなく、作成されます。
動的に作成されるクラスは、インターフェイスの実装としてCLRに受け入れられ、オブジェクトのプロパティとイベントを呼び出す(インターフェイスとしてキャストされます)場合は正常に動作します。しかし、タイプビルダーにはDefineProperty
とDefineMethod
があります。 ildasmを使用すると、ただDefineMethod
を使用すると、宣言に '.property'がないことが確認できます。インターフェースのプロパティとイベントを「ちょうどの」メソッドのように実装するのはいたずらなのですか?それとも完全に正当なのでしょうか?
新しい型をインスタンス化する場合は、動的な 'bob'変数にそれを代入し、' bob.PropertyNameHere'を使用します。 – mjwills
それは動作しません! :) – Robin