C# – delegate, event, EventHandler

发布时间 2023-06-10 00:38:50作者: 兴杰

前言

写这么多年 C#, 我从来没有写过 EventHandler. 我想应该是因为我没有用 C# 开发过前端的关系, 绝对不是我技术不行哦.

这篇就补上一个学习笔记呗.

 

参考

C#知识点讲解之C#delegate、event、Action、EventHandler的使用和区别

如何:引发事件和使用事件

 

介绍

EventHandler 就是观察者模式的实现, 你可以把它完全当作前端 DOM addEventListener 去理解. (当然前端的还有冒泡概念, 会更加复杂一点)

 

delegate

在理解 EventHandler 之前, 要先了解什么是 delegate (委托).

C# 不像 JS 那样, 函数一等公民. 天生就可以当变量, 参数使用.

在 C# 函数通常是作为类的方法来使用的, 传递的变量, 参数则是对象, 而不是函数(方法).

而 delegate 则赋予了 C# 直接传递函数的能力. 函数变一等公民了.

看代码理解

// 定义函数类型
public delegate void MyMethod(string name, int age);

public class MyClass
{
    // 参数是一个函数
    public void Run(MyMethod myMethod)
    {
        myMethod("name", 11);
    }
}

public static class Program
{
    public static void Main()
    {
        var myClass = new MyClass();
        // 变量是一个函数
        MyMethod myMethod = (name, age) =>
        {
            Console.Write($"{name}, {age}");
        };
        myClass.Run(myMethod);
    }
}