我可以委托一个事件并能够调用它吗?
我知道我可以委托我的事件的订阅到另一个事件,我可以委托一个事件并能够调用它吗?
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
以及我自己的代码来引发。
是的,你可以 - 但你需要你自己的委托变量。你既可以订阅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。它可以在处置方面都相当棘手......
通过“订阅SomeClass.AnotherEvent一次”你的意思是皮特的和阿卡什的答案? –
@Louis:和阿卡什的,是的。 –
好的谢谢。我也想到了他们的解决方案,我想像它会像你说的那样棘手。我的解决方案没有出现,我认为它好多了。谢谢! –
你必须要连接你的其他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
}
你试着用哪个代码来提高“MyEvent”? – TToni
只是我的方法中的一些代码,像'MyEvent(this);' –