22

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

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

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

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

4

2 回答 2

25

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

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

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

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

2:分别声明一个事件参数类和委托类型:

public class MySpecialEventArgs : EventArgs {...}
public delegate void MySpecialEventHandler(object sender,
    MySpecialEventArgs args);
....
event MySpecialEventHandler MyEvent;
于 2009-02-25T12:47:33.290 回答
15

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

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

public interface IMyInterface
{
    event EventHandler<MyEventArgs> MyEvent;
}
于 2009-02-25T12:49:57.387 回答