我在我的主要应用程序中拥有一堆具有私有和公共功能的表单。我有一个插件架构,可以在创建和加载每个表单时访问它,并保存对它的引用以更新它、添加控件等。
我们正在尝试做的是实现这个插件架构,但是一些插件可能需要调用表单的私有函数。这是我尝试使用 Type.InvokeMember 的示例:
public partial class Form1 : Form
{
Form1()
{
InitializeComponent();
}
private void SayHello()
{
MessageBox.Show("Hello World!");
}
}
在另一个 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[] { });
}
}
我已经尝试过"SayHello"
,"SayHello()"
它们都返回“MissingMethodException”错误:
Method 'Form1.SayHello()' not found.
我需要创建和使用活页夹吗?如果是这样,我该怎么做?我可以使用 System.Windows.Forms.Message 更轻松地做到这一点吗?如果有怎么办?