在C#中,如何在接口中声明EventHandler的子类?

时间:2009-02-25 12:42:48

标签: c# event-handling

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

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

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

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

2 个答案:

答案 0 :(得分:25)

好吧,你需要定义args并可能在某处委托。你没有需要第二个文件,但我可能会推荐它......但是这些类可能不是嵌套,如果那是原始问题。< / p>

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

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;

答案 1 :(得分:15)

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

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

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