[英]Issue raising a simple event
My interface has an event that don't has an arguments 我的界面有一个没有参数的事件
public interface IMyInterface
{
event EventHandler OnSomethingHappened;
}
Here is how I am implementing it. 这是我实现它的方式。
public class MyBaseClass : IMyInterface
{
private event EventHandler onSomethingHappened;
public event EventHandler OnSomethingHappened
{
add
{
onSomethingHappened-= value;
onSomethingHappened+= value;
}
remove
{
onSomethingHappened-= value;
}
}
}
But somehwere else when I try to use it as follows 但是当我尝试如下使用它时
if ( MyBaseClassInstance.OnSomethingHappened != null )
MyBaseClassInstance.OnSomethingHappened();
I get following compilation error 我收到以下编译错误
The event 'ConsoleApplication1.IMyInterface.OnSomethingHappened' can only appear on the left hand side of += or -=
事件“ ConsoleApplication1.IMyInterface.OnSomethingHappened”只能出现在+ =或-=的左侧
What am I doing wrong? 我究竟做错了什么?
This is how your code might look: 这是您的代码外观:
public interface IMyInterface
{
event EventHandler OnSomethingHappened;
}
//implement the interface
public class MyBaseClass : IMyInterface
{
public event EventHandler OnSomethingHappened;
public void DoSomeLogicWhichRaisesTheEvent()
{
if (OnSomethingHappened != null)
{
MyBaseClass sender = this;
var eventArgs = new EventArgs();
//let all subscibers to event know that the event happened
OnSomethingHappened(sender, eventArgs);
}
}
}
public class ConsumerClass
{
private IMyInterface myBaseClassInstance;
public ConsumerClass()
{
myBaseClassInstance = new MyBaseClass();
//attach to the event
myBaseClassInstance.OnSomethingHappened += MyBaseClassInstance_OnSomethingHappened;
}
private void MyBaseClassInstance_OnSomethingHappened(object sender, EventArgs e)
{
//react to the raised event
throw new NotImplementedException();
}
}
As you can see you need to implement the IMyInterface interface, and when MyBaseClass needs to raise the event you call OnSomethingHappened(sender, eventArgs); 如您所见,您需要实现IMyInterface接口,并且当MyBaseClass需要引发事件时,可以调用OnSomethingHappened(sender,eventArgs);。
ConsumerClass is where you need to consume, or to do something, as a reaction to the raised event. ConsumerClass是您需要消费或做某事的地方,以应对引发的事件。 You may consider to rename MyBaseClass to some other name, without 'Base' in it, because it is not an abstract class.
您可能会考虑将MyBaseClass重命名为其他名称,而不使用“ Base”,因为它不是抽象类。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.