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

C# 在派生类中引发事件处理程序,c#,events,C#,Events,有人能给出解决方案吗 public class BaseOne{ public event EventHandler OperationChanged; } public class Derived: BaseOne { private void OnChange(){ if(OperationChanged!=null){ OperationChanged(this,new EventArgs()); } } }

有人能给出解决方案吗

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");
    }
}

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

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");
    }
}

你已经试过了,但它不起作用吗?代码对我来说似乎非常好……您必须在某个地方调用OnChnage(),您认为事件会自动引发吗?您想要实现什么?你想用它做什么?或者换句话说,它怎么了?你拼写错了一个字母!!!首先,不能直接触发基类事件。第二,将方法从私有更改为受保护。这里有一个相关问题的链接,谢谢你的回答。我们是否可以优化/是否有其他模式来解决此问题?据我所知没有。
{get;set;}
:需要添加或删除访问器。