Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Methode et reflection

2 réponses
Avatar
Delf
Bonjour.

J'ai une application WinForm qui doit appeler dynamiquement une méthode
static d'une classe static qui est contenue dans une assembly externe.

Cette assembly externe contient 1 unique classe static composée d'une
seule méthode static.

La WinForm n'a pas de référence sur cette assembly.

Ma question : est-il possible d'invoquer cette méthode sans en
connaitre le type de sa classe via Reflection ?

Je pensais à quelque chose du genre :

Assemply ass = Assemply.Load(...);
Type type = ass.GetTypes()[0];

t.CallMethod("MyMethod", new object[] { 'param1", 123 });

où CallMethod() serait une méthode magique :)

Au pire je peux rendre cette classe instanciable s'il le faut vraiment.
Merci.

2 réponses

Avatar
Patrice
Bonjour,

Pour l'appel voir par exemple
http://msdn.microsoft.com/fr-fr/library/system.reflection.methodbase.invoke(VS.80).aspx
(et sans doute GetMethod pour trouver la méthode concernée à partir du
type).

Accessoirement, une explication de ce que l'on veut faire pourrait aider à
donner des conseils plus pertinents. Si par exemple c'est pour faire un
système de "plugin" il serait au moins possible d'utiliser une interface ce
qui permettrait de pouvoir inclure d'autres types dans l'assembly plutôt que
de prendre systématiquement le premier qui nous tombe sous la main (et il y
a même toute une infrastructure dans .NET sur le sujet).

--
Patrice


"Delf" a écrit dans le message de
news:4ab495d4$0$23517$
Bonjour.

J'ai une application WinForm qui doit appeler dynamiquement une méthode
static d'une classe static qui est contenue dans une assembly externe.

Cette assembly externe contient 1 unique classe static composée d'une
seule méthode static.

La WinForm n'a pas de référence sur cette assembly.

Ma question : est-il possible d'invoquer cette méthode sans en connaitre
le type de sa classe via Reflection ?

Je pensais à quelque chose du genre :

Assemply ass = Assemply.Load(...);
Type type = ass.GetTypes()[0];

t.CallMethod("MyMethod", new object[] { 'param1", 123 });

où CallMethod() serait une méthode magique :)

Au pire je peux rendre cette classe instanciable s'il le faut vraiment.
Merci.




Avatar
Delf
Patrice a formulé ce samedi :

Pour l'appel voir par exemple
http://msdn.microsoft.com/fr-fr/library/system.reflection.methodbase.invoke(VS.80).aspx
(et sans doute GetMethod pour trouver la méthode concernée à partir du type).

Accessoirement, une explication de ce que l'on veut faire pourrait aider à
donner des conseils plus pertinents. Si par exemple c'est pour faire un
système de "plugin" il serait au moins possible d'utiliser une interface ce
qui permettrait de pouvoir inclure d'autres types dans l'assembly plutôt que
de prendre systématiquement le premier qui nous tombe sous la main (et il y a
même toute une infrastructure dans .NET sur le sujet).



Je suis passé par une interface finalement.
Merci.