c#:访问父类的事件不可能?

Seb*_*ier 6 c# events inheritance

从来没有见过这个.这是样本:

using System;

namespace Testing
{
    public class Test
    {
        public event Action ActionRequired;
    }

    public class ChildTest : Test
    {
        public void DoSomething()
        {
            if (this.ActionRequired != null)
                this.ActionRequired();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这不起作用,错误是我只能从基类访问事件.

四处逛逛并不困难(向基类添加一个受保护的方法,既检查事件的调用又从子类调用该方法),但我真的想知道这个限制背后的想法是什么?

干杯,

SEBI

Ed *_* S. 14

您无法从定义它们的类外部调用事件.但是,你不需要; 只需遵循惯用的模式,同时声明一个受保护的方法来触发所述事件.

class Whatever
{
    public event EventHandler Foo;

    protected virtual void OnFoo( EventArgs e )
    {
        EventHandler del = Foo;
        if( del != null )
        {
            del( this, e );
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,类"Whatever"的后代可以通过调用OnFoo()并传入适当的EventArgs对象来触发事件.

编辑:关于为什么这是行为,Jon Skeet在另一个线程中解释得很好(这也意味着这个问题是重复的,所以投票结束):

声明类似公共字段的事件时,编译器会创建公共事件和私有字段.在同一个类(或嵌套类)中,您可以直接访问该字段,例如调用所有处理程序.从其他类中,您只能看到该事件,该事件仅允许订阅和取消订阅.