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 ...
随机推荐
- LINQ 学习路程 -- 查询操作 Quantifier Operators All Any Contain
Operator Description All 判断所有的元素是否满足条件 Any 判断存在一个元素满足条件 Contain 判断是否包含元素 IList<Student> studen ...
- windows 批处理ping ip
//pingSingleIp ;;@Echo off @for /f "tokens=1-4 delims=." %%i in (ip.txt) do (@ping -w 600 ...
- IO流 相关基础积累
一个整型32位字节. 写入到流.? 为什么要按十六进制输出到控制台?
- codeforces 707B B. Bakery(水题)
题目链接: B. Bakery 题意: 是否存在一条连接特殊和不特殊的边,存在最小值是多少; 思路: 扫一遍所有边: AC代码: #include <iostream> #include ...
- Java 对象引用以及对象赋值
一.Vehicle veh1 = new Vehicle(); 通常这条语句执行的动作被称为创建一个对象,其实他包含了四个动作. 1.new Vehicle :表示在堆空间内创建了一个Vehicle ...
- 机器学习 Support Vector Machines 2
优化的边界分类器 上一讲里我们介绍了函数边界和几何边界的概念,给定一组训练样本,如果能够找到一条决策边界,能够使得几何边界尽可能地大,这将使分类器可以很可靠地预测训练样本,特别地,这可以让分类器用一个 ...
- [原]NYOJ-字符串替换-113
大学生程序代写 /*http://acm.nyist.net/JudgeOnline/problem.php?pid=113 字符串替换 时间限制:3000 ms | 内存限制:65535 KB ...
- Ffmpeg转码研究一
Ffmpeg是一款功能强大的视频处理工具,那么转码肯定不是问题的,因为项目的需求,对转码进行了研究.刚开始首先去看了ffmpeg源代码中的一个例子transcode.c,但是发现该例子更应该称之为re ...
- 省选/NOI刷题Day2
bzoj2616 放一个车的时候相当于剪掉棋盘的一行,于是就可以转移了,中间状态转移dp套dp,推一下即可 bzoj2878 环套树期望dp 手推一下递推式即可 bzoj3295 树状数组套权值线段树 ...
- 孤独地、凄惨地AK
一个\(OIer\)要写多少\(for\) 才能被称为一个\(OIer\) 一位巨佬要爆过多少次零 才能在省选逆袭 手指要多少次掠过键盘 才能安心地休息 \(OI\)啊 我的朋友 在风中\(AK\) ...