c# - 我不明白事件委托(delegate)的双重语法

标签 c#

回答我的另一个问题How to send custom event message just after control instantiation?我读了这个:

if (ValueChanged != null)
{
   ValueChanged(sender, e);
}

第一种情况下的 ValueChanged 是什么?不是第二条指令中的功能?同一个符号如何用于 ... 和函数?

james 回答后的 uPDATE:如果 ValueChanged 是一个对象,我怎样才能像调用方法一样调用它?它是语法糖还是外来语法,背后有一些神秘的机制,比如调用 ValueChanged.Invoke(sender, e); ?

最佳答案

ValueChanged 是一个多播委托(delegate),它是一个对象。如果没有人订阅该事件,它可以为空,因此进行检查。如果您想避免检查,您可以定义一个空委托(delegate)并将其分配给事件。

public event EventHandler ValueChanged = delegate {};

您现在可以只调用 ValueChanged(sender, e),因为 ValueChanged 永远不会为 null。

关于c# - 我不明白事件委托(delegate)的双重语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4382260/

相关文章:

c# - 为什么这个 Observable.Generate 重载会导致内存泄漏? [使用时间跨度 < 15ms]

c# - 使用 LINQ 将 select 中两列的结果合并到一个数组中?

c# - 如何在单击 Xamarin 按钮时添加自定义 View

c# - VB 脚本代码不调用 c# 函数

c# - 具有泛型类型的抽象方法

c# - 如何比较 "look alike"的 Unicode 字符?

c# - 如何从 C# 应用程序调用带有指向 void 的指针的 C++ 函数?

c# - 在 C# 中是否有对字节数组进行循环位移的函数?

c# - 在当前正在写入的文件上创建 FileInfo 是否安全?

c# - 如何获得 2 列的值,而不仅仅是一列?