/ / Comment orienter un délégué vers une méthode obtenue avec réflexion - c #, réflexion, délégués

Comment diriger un délégué vers une méthode obtenue avec réflexion - c #, réflexion, délégués

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 № 1

Il 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);