今天又来说一下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的更多相关文章

  1. JNI详解---从不懂到理解

    转载:https://blog.csdn.net/hui12581/article/details/44832651 Chap1:JNI完全手册... 3 Chap2:JNI-百度百科... 11 C ...

  2. Jquery的点击事件,三句代码完成全选事件

    先来看一下Js和Jquery的点击事件 举两个简单的例子 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&q ...

  3. 关于 Chrome 浏览器中 onresize 事件的 Bug

    我在写插件时用到了 onresize 事件,在反复地测试后发现该事件在 Chrome 及 Opera(内核基本与 Chrome 相同,以下统称 Chrome)浏览器打开时就会执行,这种情况也许不能算作 ...

  4. MVVM设计模式和WPF中的实现(四)事件绑定

    MVVM设计模式和在WPF中的实现(四) 事件绑定 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在WPF中 ...

  5. C++中的事件分发

    本文意在展现一个C++实现的通用事件分发系统,能够灵活的处理各种事件.对于事件处理函数的注册,希望既能注册到普通函数,注册到事件处理类,也能注册到任意类的成员函数.这样在游戏客户端的逻辑处理中,可以非 ...

  6. 移动端IOS点击事件失效解决方案

    解决方案 解决办法有 4 种可供选择: 1 将 click 事件直接绑定到目标元素(即 .target)上 2 将目标元素换成 <a> 或者 button 等可点击的元素 3 将 clic ...

  7. Android笔记——Button点击事件几种写法

    Button点击事件:大概可以分为以下几种: 匿名内部类 定义内部类,实现OnClickListener接口 定义的构造方法 用Activity实现OnClickListener接口 指定Button ...

  8. HTML 事件(一) 事件的介绍

    本篇主要介绍HTML中的事件知识:事件相关术语.DOM事件规范.事件对象. 其他事件文章 1. HTML 事件(一) 事件的介绍 2. HTML 事件(二) 事件的注册与注销 3. HTML 事件(三 ...

  9. HTML 事件(二) 事件的注册与注销

    本篇主要介绍HTML元素事件的注册.注销的方式. 其他事件文章 1. HTML 事件(一) 事件的介绍 2. HTML 事件(二) 事件的注册与注销 3. HTML 事件(三) 事件流.事件委托 4. ...

  10. HTML 事件(三) 事件流与事件委托

    本篇主要介绍HTML DOM中的事件流和事件委托. 其他事件文章 1. HTML 事件(一) 事件的介绍 2. HTML 事件(二) 事件的注册与注销 3. HTML 事件(三) 事件流与事件委托 4 ...

随机推荐

  1. 未测试 Delphi读写UTF-8、Unicode格式文本文件

    // UTF-8文件写入函数 procedure SaveUTFFile(const FileName: string; S: string; WriteHeader: Boolean = True) ...

  2. 使用myeclipes制造属于自己的jar

    选定你需要在jar中包含的package或者class 步骤1:右键export导出, 步骤2:导出类型为java --JRE  file. 步骤3:直接finish即可完成 如果希望你的jar带源码 ...

  3. 【HDU 6428】Calculate 莫比乌斯反演+线性筛

    题解 代码 #include <bits/stdc++.h> using namespace std; typedef long long ll; const ll mod = 1LL&l ...

  4. 超链接向servlet传参数

    超链接传参数方式如下: <a href=xxxServlet?flag=1  target=“XX”></a> 注意:target=“XX”是用来指定在什么窗体打开.xx为该窗 ...

  5. Android: 一个两点触控的案例

    下面是一个两点触控的案例代码: package com.zzj; import android.app.Activity; import android.os.Bundle; import andro ...

  6. Failed to install xxxx.apk on device 'emulator-5554!

    异常信息:[HelloAndroid] Performing com.example.helloandroid.HelloAndroid activity launch[HelloAndroid] U ...

  7. Agc017_E Jigsaw

    传送门 题目大意 有$n$块拼图,每一块都由左中右三个部分组成,每块拼图中间部分是高为$H$的长方形,对于第$i$块品推左侧是高为$A_i$距离底部为$C_i$的长方体,右侧是高位$B_i$距底部为$ ...

  8. BZOJ4545: DQS的trie

    BZOJ4545: DQS的trie https://lydsy.com/JudgeOnline/problem.php?id=4545 分析: 对trie用dfs建sam复杂度是\(O(n^2)\) ...

  9. 编写dockerfile

    参考:http://www.cnblogs.com/liuyansheng/p/6098470.html 一.dockerfile介绍: 是一种被Docker程序解释的脚本,Dockerfile由一条 ...

  10. vs2015解决fopen、fscanf 要求替换为fopen_s、fscanf_s的办法

    在工程项目设置一下就行:项目属性 -- C/C++-- 预处理器 -- 预处理器定义,添加:_CRT_SECURE_NO_WARNINGS