2010-02-13 61 views
0

我有一个与事件有关的问题(不,它不是从我的上一个重复)。我感兴趣的是,如果不指定直接方法名称,我是否可以向课堂发送活动。我不能用英语很好的解释,请看看代码:发送活动给班级,但没有方法名称

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类构造函数。

+1

如果你不知道方法的名称,你知道你想要订阅哪个处理程序?可能有多种可能性。 – 2010-02-13 11:19:24

+0

我想到了像匿名方法的东西..所以它不可能? – Gustav 2010-02-13 11:21:51

+0

该示例似乎表明您想要将某些类连接到_your_事件。你为什么不反转它,将事件处理器传递给B?您可以在该课程中决定是否以及如何订阅。 – 2010-02-13 11:22:39

回答

0

假设不知道B:若B知道A,则B可以增加它的方法到事件之一A.

如果另一方面A和B都不具有对其他知识,但是它们在程序中仍然存在某种相关性,那么在其他地方必须存在代码,这些代码将它们彼此联系起来并具有两者的知识。在这种情况下,这个外部代码应该建立连接。

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

这样回答你的问题吗?

2

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

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

然后,你可以这样做:

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

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