[英]Issue raising a simple event
我的界面有一个没有参数的事件
public interface IMyInterface
{
event EventHandler OnSomethingHappened;
}
这是我实现它的方式。
public class MyBaseClass : IMyInterface
{
private event EventHandler onSomethingHappened;
public event EventHandler OnSomethingHappened
{
add
{
onSomethingHappened-= value;
onSomethingHappened+= value;
}
remove
{
onSomethingHappened-= value;
}
}
}
但是当我尝试如下使用它时
if ( MyBaseClassInstance.OnSomethingHappened != null )
MyBaseClassInstance.OnSomethingHappened();
我收到以下编译错误
事件“ ConsoleApplication1.IMyInterface.OnSomethingHappened”只能出现在+ =或-=的左侧
我究竟做错了什么?
这是您的代码外观:
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();
}
}
如您所见,您需要实现IMyInterface接口,并且当MyBaseClass需要引发事件时,可以调用OnSomethingHappened(sender,eventArgs);。
ConsumerClass是您需要消费或做某事的地方,以应对引发的事件。 您可能会考虑将MyBaseClass重命名为其他名称,而不使用“ Base”,因为它不是抽象类。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.