2009-02-25 7 views
20

如果您使用EventHandler的自定义子类而不是基类EventHandler类,那么在接口中声明事件处理函数的正确格式是什么。在C#中如何使用自定义事件处理程序创建一个事件作为接口的一部分?

创建例如在委托声明的事件处理程序子类的一个MyEventHandler,但你不能在接口中声明的委托......

当我问Visual Studio中提取它引用的事件处理程序中IMyClassName接口作为MyClassName.MyEventHandler,这显然会对类型耦合造成破坏。

我假设有一个简单的方法来做到这一点,我必须显式声明我的事件处理程序在一个单独的文件?

+0

你的意思是要强制的一类夏晖在某些事件? – abatishchev 2009-02-25 12:47:54

+0

我想要在接口中声明事件,以便实现该接口的每个类都必须实现该事件。 – 2009-02-25 13:16:52

回答

23

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

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

1:单独声明一个事件的args类,并在接口上使用EventHandler<T>

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

2:单独声明一个事件的args类和委托类型:

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

感谢它看起来像那样的作品。 – 2009-02-25 13:15:12

14

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

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

public interface IMyInterface 
{ 
    event EventHandler<MyEventArgs> MyEvent; 
} 
相关问题