从DLL文件调用方法来处理事件C#

时间:2017-05-30 05:52:01

标签: c# oop events event-handling

我是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

有什么想法吗?

2 个答案:

答案 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(对象)转换为字符串。