gpt4 book ai didi

c# - 为什么自定义访问器的事件不能像默认事件那样直接触发?

转载 作者:太空狗 更新时间:2023-10-29 21:46:44 25 4
gpt4 key购买 nike

如果我写类似下面的代码,

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

编译器会报错:错误 CS0079:事件 MainClass.MyEvent' can only appear on the left hand side of+=' or `-=' operator.

为什么会有这么奇怪的东西存在?如果我不能直接触发一个事件,我为什么要首先使用这样的东西?这是一个错误(我使用的是单声道)还是精心设计的?谁能教我这背后的基本原理?提前致谢。

最佳答案

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

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

Jon Skeet 提供了重要信息 here关于为什么会这样以及它是如何工作的。

关于c# - 为什么自定义访问器的事件不能像默认事件那样直接触发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7129323/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com