【问题标题】:Calling a method from DLL file to handle events C#从 DLL 文件调用方法来处理事件 C#
【发布时间】:2017-05-30 05:52:01
【问题描述】:

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

有什么想法吗?

【问题讨论】:

  • string(s, e) => MyDLLName.MyClass.MyMethod(string s); 中做什么?这不是你调用方法的方式——那是你声明方法(至少是参数列表)的方式。
  • 但是当你没有真正展示你正在尝试使用的代码时,它是less清楚的。 仍然不清楚,因为您提供的是类型名称而不是变量名称。请提供minimal reproducible example - 目前还不清楚您在做什么。
  • 希望现在很清楚
  • 不是真的 - 它仍然不是minimal reproducible example。我们应该能够复制、粘贴、编译和运行。此外,MyMethod 不是静态方法,那么您如何期望仅使用MyDLLName.Class1.MyMethod 来调用它?您需要在Class1 的实例上调用它。首先要解决的问题:检查这是否实际上与此在单独的程序集中相关。对单个程序集和命名空间中的所有内容尝试相同的代码。我怀疑你也会遇到同样的问题。

标签: c# oop events event-handling


【解决方案1】:

如果您像下面这样修改您的 MyMethod;

public static void MyMethod(object sender, EventArgs e)
{
//do something here..
}

那么你可以这样使用;

myButton.OnClick += MyDLLName.MyClass.MyMethod;

【讨论】:

  • 但是我还需要向方法传递参数吗?
  • 想象一下,每当您单击按钮时,myButton 组件将始终拉动相同的触发器。这意味着按钮将始终尝试传递 sender 和 e 参数。所以我强烈建议你根据这些参数来编写你的自定义方法。然后你可以在你的自定义方法中做任何你想做的事情
【解决方案2】:

如果您的方法与触发事件返回的签名不同,您可以在其周围放置一个包装器,例如:

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(它是一个对象)转换为字符串。

【讨论】:

    猜你喜欢
    • 2015-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多