【问题标题】:In C#, how do you declare a subclass of EventHandler in an interface?在 C# 中,如何在接口中声明 EventHandler 的子类?
【发布时间】:2009-02-25 12:42:47
【问题描述】:

在接口中声明 EventHandler 的子类(您已定义)的代码语法是什么?

例如,我在委托声明中创建了 EventHandler 子类 MyEventHandler,但您不能在接口中声明委托...

当我要求 Visual Studio 提取接口时,它会将 IMyClassName 中的 EventHandler 称为 MyClassName.MyEventHandler,这显然会对类型耦合造成严重破坏。

我假设有一种简单的方法可以做到这一点。我是否必须在单独的文件中明确声明我的事件处理程序?

【问题讨论】:

  • 你的意思是你想强制一个类有一些事件?
  • 我希望在接口中声明事件,以便实现该接口的每个类也必须实现该事件。

标签: c# event-handling


【解决方案1】:

好吧,您需要定义参数并可能在某处委托。您不需要需要第二个文件,但我可能会推荐它...但如果这是最初的问题,那么类可能不应该嵌套

建议使用标准的“sender, args”模式;有两种常见的方法:

1:单独声明一个event-args类,在接口上使用EventHandler<T>

public class MySpecialEventArgs : EventArgs {...}
...
EventHandler<MySpecialEventArgs> MyEvent;

2:分别声明一个 event-args 类和委托类型:

public class MySpecialEventArgs : EventArgs {...}
public delegate void MySpecialEventHandler(object sender,
    MySpecialEventArgs args);
....
event MySpecialEventHandler MyEvent;

【讨论】:

  • @OmarKooheji 您能否说明这两种方法中哪一种适合您(以及您如何在接口中声明自定义 EventHandler 类)?
【解决方案2】:

假设 C# 2.0 或更高版本...

public class MyEventArgs: EventArgs
{
    // ... your event args properties and methods here...
}

public interface IMyInterface
{
    event EventHandler<MyEventArgs> MyEvent;
}

【讨论】:

    猜你喜欢
    • 2010-09-24
    • 1970-01-01
    • 1970-01-01
    • 2017-02-01
    • 1970-01-01
    • 2018-01-19
    • 2017-08-22
    • 1970-01-01
    • 2022-10-21
    相关资源
    最近更新 更多