Ce que j'ai, c'est un tas de formulaires dans mon application principale qui ont des fonctions privées et publiques. J'ai une architecture de plugin en place qui accède à chaque formulaire quand il est créé et chargé et contient une référence pour le mettre à jour, ajouter des contrôles, etc.Existe-t-il un moyen d'appeler des fonctions privées d'un formulaire ou d'une classe via Type.InvokeMember ou des messages en C#?
Ce que nous essayons de faire est d'implémenter cette architecture plug-in, mais certains plugins peuvent avoir besoin d'appeler les fonctions privées d'un formulaire. Voici un exemple de ce que j'ai essayé avec Type.InvokeMember:
public partial class Form1 : Form
{
Form1()
{
InitializeComponent();
}
private void SayHello()
{
MessageBox.Show("Hello World!");
}
}
Dans une autre DLL ...
public class PluginClass
{
Form1 myReferencedForm1;
PluginClass()
{
//Constructor code here...
//Also sets the reference to existing Form1 instance
}
private CallMember()
{
Type t = typeof(Form1); //I guess I can also call 'myReferencedForm1.GetType();' here as well
t.InvokeMember("SayHello",
System.Reflection.BindingFlags.InvokeMethod |
System.Reflection.BindingFlags.NonPublic |
System.Reflection.BindingFlags.Public,
null, myReferencedForm1, new object[] { });
}
}
J'ai essayé "SayHello"
et "SayHello()"
et ils ont tous deux renvoient une erreur 'MissingMethodException':
Method 'Form1.SayHello()' not found.
Dois-je créer et utiliser un classeur? Si oui, comment je fais ça? Puis-je le faire plus facilement avec un System.Windows.Forms.Message? Si c'est le cas, comment?
Ceci est une copie de [Comment utiliser la réflexion pour invoquer une méthode privée en C#?] (Http://stackoverflow.com/questions/135443/how-do-i-use-reflection-to-invoke- a-private-method-in-c) – jason
Sont-ils dans la même DLL? Vous pourriez rendre SayHello() interne plutôt que privé si oui – wangburger
Non, ils ne le sont pas. Je vais mettre à jour le code dans la question. –