====Exemple====
// On récupère l'assembly d'un type particulier.
// C'est mieux que Assembly.GetExecutingAssembly()
Assembly assembly = type.Assembly;
Type typeUi = assembly.GetType("TypeAChercher");
if (typeUi == null)
{
return false;
}
// On cherche la méthode "ShowDialogStatic" qui est statique, non publique
// (internal, protected, private) et qui peut être invoquée (pas constructeur).
MethodInfo afficheEditeur = typeUi.GetMethod("ShowDialogStatic",
BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.InvokeMethod);
if (afficheEditeur == null)
{
return false;
}
// On récupère les paramètres.
ParameterInfo[] parametres = afficheEditeur.GetParameters();
object[] argumentsShowDialogStatic = new object[parametres.Length];
for (int i = 0; i < parametres.Length; i++)
{
// Si c'est un paramètre générique, on récupère la liste des arguments génériques.
Type[] typesGeneric = parametres[i].ParameterType.GetGenericArguments();
foreach (Type typeGeneric in typesGeneric)
{
// On cherche la méthode "ToutesLesActions" dans la classe "PclBatch".
MethodInfo method = typeof(PclBatch).GetMethod("ToutesLesActions",
BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.InvokeMethod);
// On dit que c'est une méthode générique avec ses arguments génériques.
MethodInfo generic = method.MakeGenericMethod(typeGeneric);
// On invoque la méthode et on récupère le résultat.
argumentsShowDialogStatic[i] = generic.Invoke(batch, BindingFlags.Default, null,
new object[] { action.Id }, CultureInfo.InvariantCulture);
}
}
// On invoque la méthode et on récupère le résultat.
ActionPocoInterface nouvelle_action = (ActionPocoInterface)afficheEditeur.Invoke(null, argumentsShowDialogStatic);
====CultureInfo.InvariantCulture====
Avec les valeurs par défaut, ''Invoke'' s'appelle :
generic.Invoke(batch /*objet, null si statique*/, BindingFlags.Default, null, /*liste des arguments*/new object[] { action.Id }, CultureInfo.InvariantCulture);
====BindingFlags====
Pour trouver une méthode, il faut impérativement :
* ''BindingFlags.Public'' : si la méthode est publique,
* ''BindingFlags.NonPublic'' : si la méthode n'est pas publique (''internal'', ''protected'', ''private''),
* ''BindingFlags.Instance'' : si la méthode n'est pas statique,
* ''BindingFlags.Static'' : si la méthode est statique.