为什么具有自定义访问器的事件不能像默认情况那样直接触发?

Nee*_*eed 6 c# events

如果我写下面的代码,

class MainClass
{
    static EventHandler _myEvent= delegate{};
    static event EventHandler MyEvent
    {
        add{_myEvent += value;}
        remove{_myEvent -= value;}
    }

    public static void Main (string[] args)
    {
        MyEvent(null,EventArgs.Empty);
    }
}
Run Code Online (Sandbox Code Playgroud)

编译器会抱怨:错误CS0079:事件MainClass.MyEvent' can only appear on the left hand side of+ ='或` - ='运算符.

为什么存在像这样奇怪的东西呢?如果我不能直接发射事件,为什么我会首先使用这样的东西?这是一个错误(我使用单声道)还是故意精致的设计?谁能请教我这背后的理由?提前致谢.

Bry*_*sby 3

您只能访问声明类中的事件。在幕后,.NET 创建私有实例变量来保存委托。

编译器实际上正在创建一个公共事件和一个私有字段。您可以直接从同一类或嵌套类访问该字段。对于外部课程,您只能订阅/取消订阅。

此处提供了乔恩·斯基特 (Jon Skeet) 提供的有关其原因及其工作原理的重要信息。