我可以委托一个事件并能够调用它吗?

问题描述:

我知道我可以委托我的事件的订阅到另一个事件,我可以委托一个事件并能够调用它吗?

public event EventHandler MyEvent 
{ 
    add { SomeClass.AnotherEvent += value; } 
    remove { SomeClass.AnotherEvent -= value; } 
} 

在这种情况下,如果AnotherEvent抬起,然后MyEvent也将被提高。

但是在我的课,我不能在我自己照常升起MyEvent(),因为它说: Error 3 The event 'MyEvent' can only appear on the left hand side of += or -=

我想这是因为上述认购代表团。

我可以委托订阅以及自行调用订阅吗?目标是让MyEvent可以通过两个东西AnotherEvent以及我自己的代码来引发。

+0

你试着用哪个代码来提高“MyEvent”? – TToni

+0

只是我的方法中的一些代码,像'MyEvent(this);' –

是的,你可以 - 但你需要你自己的委托变量。你既可以订阅SomeClass.AnotherEvent一次,当事件引发调用自己的委托,或者只是保持订户两次:

private EventHandler myEvent; 

public event EventHandler MyEvent 
{ 
    add 
    { 
     myEvent += value; 
     SomeClass.AnotherEvent += value; 
    } 
    remove 
    { 
     myEvent -= value; 
     SomeClass.AnotherEvent -= value; 
    } 
} 

请注意,如果你去了“订阅SomeClass.AnotherEvent一次”的方式,你可能想要考虑只有订阅当您第一次看到订阅MyEvent,并取消订阅myEvent在取消订阅后变为null。它可以在处置方面都相当棘手......

+0

通过“订阅SomeClass.AnotherEvent一次”你的意思是皮特的和阿卡什的答案? –

+0

@Louis:和阿卡什的,是的。 –

+0

好的谢谢。我也想到了他们的解决方案,我想像它会像你说的那样棘手。我的解决方案没有出现,我认为它好多了。谢谢! –

你必须要连接你的其他SomeClass的的事件..

// constructor or initializer.. 

SomeClass.AnotherEvent += (s,e)=>{ 
    if(MyEvent != null){ 
     MyEvent(s,e); 
    } 
}; 

// let this be implicit default event 
public event EventHandler MyEvent; 

protected void RaiseMyEvent(){ 
    if(MyEvent != null){ 
     MyEvent(this,EventArgs.Empty); 
    } 
} 

您需要调用委托本身,而不是事件属性。由于MyEvent没有后台字段,这意味着您必须调用SomeClass.AnotherEvent的后台字段,该字段(通常)只能用SomeClass。正如其他人所说,有这方面的解决方法。看到他们的答案。

我不认为你可以,如果可以的话,我不认为这是合乎逻辑的。所以我会正常实现这个事件,然后向你的类添加一个事件处理程序来监听来自其他类的事件。

你基本上正在创建一个类,当事件在类内部发生时发生,并且在依赖类中发生了某些事件。我认为实施应该反映这一点。例如:

public MyClass() 
{ 
    this.other = new SomeClass; 
    other.AnotherEvent += SomeClass_AnotherEvent; 
} 
public event EventHandler MyEvent; 
private void SomeClass_AnotherEvent(object sender, EventArgs e) 
{ 
    if (MyEvent != null) 
     MyEvent(this, e); // I think that it would be most logical, that you do not pass the sender 
}