Je charge dynamiquement un assemblage en tant que:
var assembly = Assembly.LoadFile("PathOFMyDll");
de toute façon cet assemblage a la méthode statique Filter
à l'intérieur de la classe DynamicClass
. Donc, une fois que j'ai cet assemblage, j'exécute cette méthode comme:
var filter = assembly.GetType("DyamicClass").GetMethod("Filter");
// that method accepts a object as parameter
filter.Invoke(null, new object[] { "test" });
Maintenant ma question est:
J'ai le délégué delegate bool FilterDelegate(object item);
pourquoi il est impossible de faire pointer un délégué de ce type sur cette méthode pour avoir:
FilterDelegate myPointerToMethodFilter = (FilterDelegate)assembly.GetType("DyamicClass").GetMethod("Filter");
bool result = myPointerToMethodFilter("test");
notez que le compilateur ne se plaint que lorsque vous essayez de compiler. Je ne reçois aucune erreur de syntaxe.
Réponses:
2 pour la réponse № 1Il est possible de créer un délégué à partir d’un MethodInfo
objet, mais la coulée ne suffit pas.
Au lieu de cela, utilisez Delegate.CreateDelegate()
:
MethodInfo myMethodFilter = assembly.GetType("DyamicClass").GetMethod("Filter");
FilterDelegate myPointerToMethodFilter = (FilterDelegate)Delegate.CreateDelegate(typeof (FilterDelegate), myMethodFilter);