在派生类中引发事件处理程序

本文关键字:事件处理 程序 派生 | 更新日期: 2023-09-27 18:27:52

有人能给出解决方案吗?

public class BaseOne{
    public event EventHandler OperationChanged;
}
public class Derived: BaseOne
{
    private void OnChange(){
        if(OperationChanged!=null){
            OperationChanged(this,new EventArgs());
        }
    }
}
public Class MainClass
{
    public void Main()
    {
        Derived d = new Derived();
        d.OperationChanged += OnOperationChange;
    }
    private void OnOperationChange(object sender, EventArgs e)
    {
        MessageBox("Hello I'm Called");
    }
}

我已经试过了,你能提出更好的方法吗?提前感谢:)

在派生类中引发事件处理程序

不能直接激发基类事件。

这是一个有用的模式。

using System;
class Base
{
    public event EventHandler operationsChanged;
    public void OnOperationsChanged(EventArgs e)
    {
        operationsChanged(this,e);
    }
}
class Derived : Base
{
    public void OnSpecificOperationChanged()
    {
        OnOperationsChanged(EventArgs.Empty);
    }
}
class Test
{
    static void  Main()
    {
        Derived d = new Derived();
        d.operationsChanged += OnOperationsChanged;
        //invoke
        d.OnSpecificOperationChanged();
    }
    static void OnOperationsChanged(object sender, EventArgs e)
    {
        Console.WriteLine("called");
    }
}

https://msdn.microsoft.com/en-us/library/hy3sefw3.aspx

我找到了一个新的解决方案。简单的解决方案是将字段设置为Property。。。

using System;
class Base
{
    public event EventHandler OperationsChanged {get; set;}
}
class Derived : Base
{
   public void OnSpecificOperationChanged()
   {
        OperationsChanged(this, EventArgs.Empty);
   }
}
class Test
{
    static void  Main()
    {
        Derived d = new Derived();
       d.OperationsChanged += OnOperationsChanged;
       //invoke
       d.OnSpecificOperationChanged();
    } 
    static void OnOperationsChanged(object sender, EventArgs e)
    {
        Console.WriteLine("called");
    }
}