C#中的事件和委托
来源:互联网 发布:centos开机进入grub 编辑:程序博客网 时间:2024/04/27 06:50
作者:王俊杰
链接:https://www.zhihu.com/question/21638630/answer/32794112
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
附上源码:
链接:https://www.zhihu.com/question/21638630/answer/32794112
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
我想大概得是这么一个故事吧!
<img src="https://pic2.zhimg.com/66fc7e060d8859bc54e7ac7869bc0225_b.jpg" data-rawwidth="397" data-rawheight="265" class="content_image" width="397">附上源码:
using System;namespace 起床事件{ class 主程序 { static void Main(string[] args) { /* 项目场景描述: * 我从明天早上开始要早起晨读,室友每天都七点起床晨跑,我告诉他明天起来的时候把我叫醒,并让我晨读 * PS:还有个王八犊子非要跟我赌五毛我起不来,还让明天室友也叫他,见证我到底有没有起来 */ //首先你们三个得存在吧 var 中国好室友 = new 室友(); var 我 = new 要晨读的我(); var 王八犊子 = new 王八犊子(); //我先告诉室友:我要早起晨读 中国好室友.叫别人起床该干嘛干嘛 += 我.起床晨读; //王八犊子来搅屎了 中国好室友.叫别人起床该干嘛干嘛 += 王八犊子.赌五毛起不来; //于是第二天到了 Console.WriteLine("闹铃:早上七点钟..."); Console.WriteLine("系统提示:室友起床了!"); Console.WriteLine(); 中国好室友.起床晨跑去(); Console.WriteLine(); Console.WriteLine("==========全剧终=========="); Console.ReadLine(); } public delegate void 这是一个委托(); public class 室友 { public void 起床晨跑去() { Console.WriteLine("室友:喂,起床啦!"); Console.WriteLine(""); if (叫别人起床该干嘛干嘛 != null) //如果有人委托我什么 { 叫别人起床该干嘛干嘛(); } Console.WriteLine("室友:完事走人,晨跑去!"); } public event 这是一个委托 叫别人起床该干嘛干嘛; } public class 要晨读的我 { public void 起床晨读() { Console.WriteLine("我:哦,起来了!!!"); Console.WriteLine("我:一二三四五,上网看知乎,刷完知乎再晨读!"); Console.WriteLine(); } } public class 王八犊子 { public void 赌五毛起不来() { Console.WriteLine("王八犊子:五毛拿走,劳资要碎觉!"); Console.WriteLine(); } } }}
觉得这样直接贴代码,不做解释的话,可能还令人不太理解,再补充下概念。
方法:具体去做什么事实际内容,可以是早读,晨跑,或者是叫别人起床。
委托:将方法当做值。就像整数型值3能赋给一个int类型的变量,方法可以赋值给相同参数的委托类型变量。通过关键字delegate定义。
事件:一个需要先定义的委托类型和关键字event来定义。具体就是可以承载方法。
事件的用法:不讲编译器帮我们做的正规使用方法,因为我自己也不太清楚。直接用语法糖,事件变量 += 需要挂接的方法.然后就是在内部处理,何时去触发这个事件了事件变量() ,当然其形参的定义就看委托类型的定义了,亦可以将事件变量里面的挂接的方法逐个处理,这就等理解事件并能简单实用后,再去查资料啦~~
PS:可能我理解的有些误区,但管他呢我知道这么用能完成我的需求。原理什么的想知道的话看书去啦!如果你用过C/C++ 的函数指针,那么跟你说委托就是函数指针,事件就是保存多个函数指针的数组就够了。
0 0
- C#中的委托和事件
- C# 中的委托和事件
- C# 中的委托和事件
- C# 中的委托和事件
- C# 中的委托和事件
- C# 中的委托和事件
- C# 中的委托和事件
- C#中的委托和事件
- C# 中的委托和事件
- C# 中的委托和事件
- C# 中的委托和事件
- c#中的委托和事件
- C#中的委托和事件
- C# 中的委托和事件
- C# 中的委托和事件
- C# 中的委托和事件
- C# 中的委托和事件
- C# 中的委托和事件
- 环境搭建arm-linux-gcc 没有那个文件或目录的问题
- WEB的mavan项目构建生成可执行jar包
- Java实现串口数据读写
- oracle数据库的备份还原标准化实施部署指南
- PHP Socket(套接字连接)扩展简介和使用方法
- C#中的事件和委托
- 前端框架Aurelia
- 集中式日志系统 ELK 协议栈详解
- SOAP请求、响应报文格式
- JSON中optString()和getString()区别
- 直接插入排序和希尔排序
- sqlserver服务器名称改成本地IP地址登录
- 图解scrollHeight, clientHeight, offsetHeight, scrollTop以及获取方法
- 批量下载搜狗词库