C# 委托和事件 2021-08-20 C# 暂无评论 ``` c# public delegate void SayHello(string content, string who);//定义委托(决定了参数类型和个数) public static event SayHello sayHelloEvent;//定义SayHello类型的事件 ``` ```c# SayHello dlgSay = say; //定义sayhelllo委托变量,并且绑定一个方法 dlgSay += say1; //给变量再增加一个方法 dlgSay("你好呀", "张三!"); //调用委托变量 这时候say和say1都会执行 SayHello dlgSay1 = delegate (string con, string name) { Console.WriteLine(name + con + "匿名函数"); }; //直接给委托变量绑定一个匿名函数 dlgSay1("nihao", "zhangsan"); SayHello dlg2 = (name, who) => { Console.WriteLine(name + who + "lambda"); };//绑定lambda表达式也可以 dlg2("你好,", "张三"); sayHelloEvent += Program_sayHelloEvent1; //注册事件 sayHelloEvent += Program_sayHelloEvent;//注册事件 //sayHelloEvent -= Program_sayHelloEvent; //注销事件 sayHelloEvent("事件", "事件1");//触发事件 ``` ```c# public static void say(string content, string who) { Console.Write($"{who}" + $"{content}"); } public static void say1(string content, string who) { Console.Write($"{who}" + $"{content}" + "say1"); } //触发事件的时候要执行的方法前提是已经次绑定了 private static void Program_sayHelloEvent1(string content, string who) { //原本应该是他先执行的(确实是先执行的)因为是异步延迟不妨碍后面的事件。 Task.Run(() => { Thread.Sleep(5000); Console.WriteLine(who + content + "我是被触发的事件 Program_sayHelloEvent1"); }); } private static void Program_sayHelloEvent(string content, string who) { Console.WriteLine(who + content + "我是被触发的事件 Program_sayHelloEvent"); } ``` tips: > 个人理解:委托(确定参数类型和个数)可以把方法给串起来,当这个委托变量被执行的时候会按照+=顺序来执行。 事件也是这么回事跟委托差不多,事件是用event修饰的委托,事件执行的时候,也是按照+=的顺序来执行方法(参数类型、个数、静态取决于委托是怎么定义的) 标签:学习, c#