简单理解C#委托事件,示例如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 | using System; /// <summary> /// ---------------------委托步骤--------------------- /// 第一步:声明委托 /// 第二步:委托使用方法的实现 /// 第三步:委托的解释(将方法以变量的形式传递,且以方法的形式执行)--方法与委托建立联系 /// 注: /// 委托链的概念(+=、-=,+=表示建立联系,-=表示委托作废) /// 匿名函数:一次性调用(如需多次调用,则应提取) /// /// ---------------------事件:可理解为一种特殊的功能受限的委托--------------------- /// 第一步:声明事件(eg:public static event DelegateSayHello EventSayHello;) /// 第二步:订阅或取消事件(+=/-=) /// 第三步:调用事件 /// </summary> namespace DelegateDemo { /// <summary> /// 无参无返回值委托 /// </summary> public delegate void DelegateSayHello(); /// <summary> /// 带参无返回值委托 /// </summary> /// <param name="messageInfo">参数信息</param> /// <returns></returns> public delegate string DelegateSayMessage( string messageInfo); /// <summary> /// 带参无返回值委托 /// </summary> /// <param name="messageInfo">参数信息</param> public delegate void DelegateSayGoodBye( string messageInfo); class Program { //声明事件 public static event DelegateSayMessage EventSayHello; static void Main( string [] args) { string message = DelegateTest(); //Console.WriteLine(message); //注册事件/订阅事件 EventSayHello += Program_EventSayMessage; //调用事件 if (EventSayHello != null ) Program_EventSayMessage( "事件调用来一波" ); Console.ReadLine(); } private static string Program_EventSayMessage( string messageInfo) { Console.WriteLine($ "{messageInfo}" ); return messageInfo; } private static string DelegateTest() { //委托简单用法 DelegateSayHello say = SayHello; say(); DelegateSayMessage mes = SayMessage; string message = mes( "带参带返回值" ); //委托链用法 DelegateSayHello say1 = SayHello; say += SayHello; say -= SayHello; //匿名函数用法 DelegateSayGoodBye nickMethod = delegate ( string messageInfo) { Console.WriteLine($ "{messageInfo}我是无参无返回值匿名函数" ); }; nickMethod( "nickMethod 匿名方法调用==" ); DelegateSayMessage returnSay = delegate ( string messageInfo) { string str = messageInfo + "有参有返回值匿名函数:" ; Console.WriteLine(str); return str; }; returnSay( "returnSay 匿名方法调用==" ); //Lamda表达式 DelegateSayGoodBye lamda = (messageInfo) => { Console.WriteLine($ "{messageInfo }lamda用法来一波" ); }; lamda( "swg:" ); return message; } private static void SayHello() { Console.WriteLine( "hello delegate" ); } private static string SayMessage( string messageInfo) { string str = "SayMessage==" + messageInfo; return str; } } } |
博客内容主要用于日常学习记录,内容比较随意,如有问题,还需谅解!!!
分类:
003 C# / 003 C#杂记
, 007 常用帮助类
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
2017-01-03 angularJs select