C#事件2
今天又来说一下C#中的事件,为什么会有这个又呢?一个是因为以前写过一篇关于事件的东西,二来呢是因为感觉接口这个东西完全可以替换委托来写事件。因为这两个方面的原因,重新过了一遍C#中的事件。
事件这个东西C#中定义事件的是EventHandler这个委托,所以呢我们暂且按照C#这个模式写一个简单的事件,代码如下:

这个类很简单,一个汽车类,包含一个字段,以及其相应的属性,然后是构造方法,接下来是核心代码:定义了一个事件run,就是汽车跑起来的事件,然后定义了一个go方法这个go方法用于触发这个run事件。
接下来我们定义了一个类来订阅这个run事件,如下:

这个类蛮好玩的,首先是字段和属性,分别是人的名字的人的汽车,然后是构造函数,构造函数注意一下第四行,这个地方是订阅了这个事件,这个事件的具体实现是在human中的doSthWhenCarRun()方法中来具体定义的。
好的废话不多说我们来看一下Main方法,然后来运行这个Console程序:

VeryVeryEasy的主函数,局势实例化了一个human,然后触发了human.Car的run事件。OK我们来看一下运行后的结果:

非常非常的简单的一个小程序。但是分析起来还是有好多想说的,那么下面我就来说一下:
这个Car呢,我们可以类比为我们平时写程序中的Button、Label、TextView、ComboBox、DropdownList、DataGridView、Gridview、CheckBox等等定义好的那些控件,Car中的run事件就相当于Button中的Click、TextView中的TextChanged、TextChanging(可能没有)、或者Combobox中的SelectedIndexChanged事件等等,无外乎触发的方法不同,Button用的捕获鼠标的点击,我们Car用的是go方法而已。理解了这个可以说就理解了这篇文章的50%;
接下来我们再看一下接下来的50%是什么------它就是我们的human类,human类跟我们平时用的什么类似呢?相当于我们WinForm中的Form、WebPage中的Page、WebForm中的Form,我们在创建一个窗体之后,我们肯定会拖动过来几个控件,这个过程可以说就是跟自己在human类中写一个Car是一样子的,不过是宇宙级的VisualStudio将这个写控件的事情编程了拖动,让我们更轻松的实现了。然后我们有了窗体,有了控件我们肯定会给窗体加几个事件,加事件也蛮简单:选中控件在属性列表中找到事件列表的选项卡,在改选项卡中选中指定的事件双击就可以了。这个同样是宇宙IDE给我们的便利,我们自己写代码则需要如上面我写的那样使用+=来注册一个事件了。最后要讲的是我上面的这个doSthWhenCarRun()这个方法是不是看着很眼熟啊?是的方法签名跟我们写Click啊、changed啊等等事件都是一样的,只不过我们平时都称他们是事件体,是的他们不是事件,他们本质上是一个方法。
至此,100%的核心知识点讲完了。不得不说宇宙级的IDE就是宇宙级的IDE,微软这个做的确实蛮屌的,不论是使用人数很多的Eclipse、收费的各种Storm,都没有这种拖动实现的便捷功能。要说的AndroidStudio做的也有这个拖动的功能,蛮厉害的。
最后的最后,回答一个上面我提到的用接口可不可以写出事件的功能呢?我的答案是Yes,接下来我将粘贴改造后用接口实现的新的Car类,如下:

接下来看一下改写后的human2类,如下:

在Main方法中调用,如下:

我们看一下运行的结果:

哇哦-----真的完全一样唉!
至此本来应该结束了,但是呢好不容易写了这么牛X的一个东西,还想啰嗦几句:我们看新闻的时候总是听到说要增强四个自信,哪四个自信呢:社会主义的理论道路自信、理论自信、制度自信、文化自信,我们搞C#的也一样要增强我们的四个自信:C#语言自信、理论自信、IDE自信、文化自信,祝愿C#的明天更美好!
C#事件2的更多相关文章
- JNI详解---从不懂到理解
转载:https://blog.csdn.net/hui12581/article/details/44832651 Chap1:JNI完全手册... 3 Chap2:JNI-百度百科... 11 C ...
- Jquery的点击事件,三句代码完成全选事件
先来看一下Js和Jquery的点击事件 举两个简单的例子 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&q ...
- 关于 Chrome 浏览器中 onresize 事件的 Bug
我在写插件时用到了 onresize 事件,在反复地测试后发现该事件在 Chrome 及 Opera(内核基本与 Chrome 相同,以下统称 Chrome)浏览器打开时就会执行,这种情况也许不能算作 ...
- MVVM设计模式和WPF中的实现(四)事件绑定
MVVM设计模式和在WPF中的实现(四) 事件绑定 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在WPF中 ...
- C++中的事件分发
本文意在展现一个C++实现的通用事件分发系统,能够灵活的处理各种事件.对于事件处理函数的注册,希望既能注册到普通函数,注册到事件处理类,也能注册到任意类的成员函数.这样在游戏客户端的逻辑处理中,可以非 ...
- 移动端IOS点击事件失效解决方案
解决方案 解决办法有 4 种可供选择: 1 将 click 事件直接绑定到目标元素(即 .target)上 2 将目标元素换成 <a> 或者 button 等可点击的元素 3 将 clic ...
- Android笔记——Button点击事件几种写法
Button点击事件:大概可以分为以下几种: 匿名内部类 定义内部类,实现OnClickListener接口 定义的构造方法 用Activity实现OnClickListener接口 指定Button ...
- HTML 事件(一) 事件的介绍
本篇主要介绍HTML中的事件知识:事件相关术语.DOM事件规范.事件对象. 其他事件文章 1. HTML 事件(一) 事件的介绍 2. HTML 事件(二) 事件的注册与注销 3. HTML 事件(三 ...
- HTML 事件(二) 事件的注册与注销
本篇主要介绍HTML元素事件的注册.注销的方式. 其他事件文章 1. HTML 事件(一) 事件的介绍 2. HTML 事件(二) 事件的注册与注销 3. HTML 事件(三) 事件流.事件委托 4. ...
- HTML 事件(三) 事件流与事件委托
本篇主要介绍HTML DOM中的事件流和事件委托. 其他事件文章 1. HTML 事件(一) 事件的介绍 2. HTML 事件(二) 事件的注册与注销 3. HTML 事件(三) 事件流与事件委托 4 ...
随机推荐
- Shiro-Permissions 对权限的深入理解
单个权限 query单个资源多个权限 user:query user:add 多值 user:query,add单个资源所有权限 user:query,add,update,delete user:* ...
- springmvc接受表单多条数据的值
点击下面链接查看具体内容: http://blog.csdn.net/lutinghuan/article/details/46820023
- 解析centos中Apache、php、mysql 默认安装路径
apache:如果采用RPM包安装,安装路径应在 /etc/httpd目录下apache配置文件:/etc/httpd/conf/httpd.confApache模块路径:/usr/sbin/apac ...
- php数据结构课程---3、队列(队列实现方法)
php数据结构课程---3.队列(队列实现方法) 一.总结 一句话总结: 1.数据实现:适用于功能不复杂的情况 2.链表实现:受限链表,只能队头队尾操作:适用于功能复杂情况 1.队列的数组实现注意点? ...
- linux应用之ntpdate命令联网同步时间
当Linux服务器的时间不对的时候,可以使用ntpdate工具来校正时间. 安装:yum install ntpdate ntpdate简单用法: # ntpdate ip # ntpdate 210 ...
- string 中的 length函数 和size函数 返回值问题
string 中的 length函数 和 size函数 的返回值 ( 还有 char [ ] 中 测量字符串的 strlen 函数 ) 应该是 unsigned int 类型的 不可以 和 -1 ...
- Java钉钉开发_异常_01_error code:50002, error message:请求的员工userid不在授权范围内
一.异常原因: 请求的员工不在 应用的可见范围内. 如下图,应用的可见范围只设置为了部分员工.所以导致此异常 二.异常解决 将员工添加进可见范围即可
- 5_Singleton 游戏开发中的单例模式
强制类只有一个实例 提供全局的访问 ###为什么使用: ``` 如果没有地方访问这个类,则不会创建实例 静态类在main之前实例化, 可以尝试Lazy initialization 派生单例类, 获得 ...
- stl_stack.h
stl_stack.h // Filename: stl_stack.h // Comment By: 凝霜 // E-mail: mdl2009@vip.qq.com // Blog: http:/ ...
- 机器学习:YOLO for Object Detection (一)
最近看了基于CNN的目标检测另外两篇文章,YOLO v1 和 YOLO v2,与之前的 R-CNN, Fast R-CNN 和 Faster R-CNN 不同,YOLO 将目标检测这个问题重新回到了基 ...