====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.