我是OOP的新手,我正在构建一个C#库,需要从我的.dll文件中调用一个方法作为按钮处理程序
例如,开发人员可以将我的库的.dll文件添加到他的项目中。他创建了一个按钮,而不是创建一个方法来处理事件,他从我的.dll文件调用一个方法并传递它的参数。我想我会有类似下面的代码,但无法运行!
在我的DLL中,我有“Class1”类,如下所示:
Class1
{
private string _s;
public Class1(string s)
{
this._s = s;
}
public static void MyMethod(Class1 c)
{
// do something
}
}
在我目前的项目中我有:
MainClass
{
Class1 c = new Class1();
Button myButton = new button();
}
现在我想在单击myButton时从Class1调用MyMethod。我试过了:
myButton.OnClick += MyDLLName.Class1.MyMethod(c);
我也尝试过:
myButton.OnClick += (s,e) => MyDLLName.Class1.MyMethod(c);
但它一直给我“方法名称预期”错误!
我不想在我的MainClass中创建一个处理程序方法并从Class1调用MyMethod
有什么想法吗?
答案 0 :(得分:0)
如果您修改MyMethod,如下所示;
public static void MyMethod(object sender, EventArgs e)
{
//do something here..
}
然后你可以像这样使用;
myButton.OnClick += MyDLLName.MyClass.MyMethod;
答案 1 :(得分:0)
如果您的方法与触发事件返回的签名不同,您可以在其周围放置一个包装器,例如:
public static void WrapperMethod(object sender, EventArgs e)
{
MyDLLName.MyClass.MyMethod(sender.Tostring());
}
myButton.OnClick += WrapperMethod;
此外:
myButton.OnClick += (s,e) => MyDLLName.MyClass.MyMethod(s.toString());
应该工作 - 请注意,您不必在方法中定义参数的类型 - 如果您的方法需要一个字符串,您需要以某种方式将s(对象)转换为字符串。