繁体   English   中英

提出一个简单的事件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM