将事件发送到没有方法名称的类

时间:2010-02-13 11:13:47

标签: c# events

我有一个与事件有关的问题(不,它与我之前的事件没有重复)。我感兴趣的是我是否可以在没有指定直接方法名称的情况下将事件发送到类。我无法用英语解释,请查看代码:

class a
{
  public event eventhandler TEST;
  b _b=new b();
 TEST+=b_.MethodA(); //this is not useful for me since I need to know the method name that will be used by class B. }

class b
{ 
 MethodA();
}

我只需要引发一个事件并让B类所有者(在B类中)确定将调用哪个方法。我能想到的唯一想法是将事件或类作为参数传递给B类构造函数。

2 个答案:

答案 0 :(得分:2)

如果您希望B级确定如何处理该事件,那么它需要一些广告方式,它可以这样做。一种简单的方法是实现一个接口 - 但这意味着它只能有一个处理程序。但是,这意味着您可以使用界面的任何实现,并让它决定做什么。接口看起来像事件处理程序委托签名,基本上是:

public interface IEventHandler
{
    void HandleEvent(object sender, EventArgs e);
}

然后你可以这样做:

IEventHandler handler = new B(); // Assuming B implements IEventHandler
TestEvent += handler.HandleEvent;

但我想不出任何时候我真的想要这样做。你能给我们更多关于大局的信息吗?

答案 1 :(得分:0)

假设A不知道B:如果B知道A,那么B可以将其中一种方法添加到A中的事件中。

另一方面,如果A和B都不知道另一方,但它们仍然在某种程度上与程序有关,那么其他地方必须存在将它们相互关联并且具有两者的知识的代码。在这种情况下,此外部代码应进行连接。

A a = new A();
B b = new B();
a.TEST += b.methodA();

这回答了你的问题吗?