gpt4 book ai didi

c# - 类似现场的事件和匿名代表

转载 作者:行者123 更新时间:2023-11-30 16:30:23 26 4
gpt4 key购买 nike

当类字段事件的名称 SomeNews 用于声明此事件的类中时,此名称不引用事件本身,而是引用匿名私有(private)委托(delegate) D 由编译器创建,因此 D 可以通过 SomeNews();

间接调用(在 MyClass 内部) >
class MyClass
{
public event MyDelegate SomeNews;
...
}

但是如果 MyClass 通过同时指定 addremove 访问器来声明一个事件 SomeNews:

class MyClass
{
private delegate MyDelegate _someNews;
public event MyDelegate SomeNews
{
add
{
_someNews += value;
}

remove
{
_ someNews -= value;
}
}

...
}

然后甚至在 MyClass 中,名称 SomeNews 是否指的是事件本身而不是底层委托(delegate) _someNews?我假设这是因为尝试通过 SomeNews() 调用 _someNews 委托(delegate)将导致编译时错误,提示“SomeNews 事件只能出现在左侧+= 或 -= 的一侧"

谢谢

最佳答案

您似乎已经回答了自己的问题。是的,当使用完整的事件语法时,在声明类中引用事件与在任何其他类中引用它没有什么不同。这是因为,与属性一样,编译器不知道您在 addremove block 中实际做什么。

没有任何内容表明您必须创建一个简单的事件来添加和删除底层委托(delegate)的值,或者您必须对提供的值执行任何操作。因此,不可能通过简单地在代码中调用它来“调用”事件,因为编译器不知道如何调用事件。

关于c# - 类似现场的事件和匿名代表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5720871/

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