1

アセンブリを次のように動的にロードします。

 var assembly = Assembly.LoadFile("PathOFMyDll");

とにかく、アセンブリにはFilterクラス内に静的メソッドがありますDynamicClass。したがって、そのアセンブリを取得したら、そのメソッドを次のように実行します。

 var filter = assembly.GetType("DyamicClass").GetMethod("Filter");

 // that method accepts a object as parameter
 filter.Invoke(null, new object[] { "test" });

今私の質問は:

delegate bool FilterDelegate(object item);そのタイプのデリゲートをそのメソッドにポイントさせることができない理由をデリゲートに持っています。

 FilterDelegate myPointerToMethodFilter = (FilterDelegate)assembly.GetType("DyamicClass").GetMethod("Filter");
 bool result = myPointerToMethodFilter("test");

コンパイラは、コンパイルしようとしたときにのみ文句を言うことに注意してください。構文エラーは発生しません。

4

1 に答える 1

2

オブジェクトからデリゲートを作成することは可能ですMethodInfoが、キャストだけでは不十分です。

代わりに、:を使用してDelegate.CreateDelegate()ください

MethodInfo myMethodFilter = assembly.GetType("DyamicClass").GetMethod("Filter");
FilterDelegate myPointerToMethodFilter = (FilterDelegate)Delegate.CreateDelegate(typeof (FilterDelegate), myMethodFilter);
于 2012-09-11T16:01:48.127 に答える