C#基础:事件(二) 【转】
上篇文章介绍了C#中事件的基本实现方式,在本文中,将对最常见的事件委托EventHandler和EventHandler<T>做介绍。
事实上,在前面文章的介绍中,已经涉及到了EventHandler和EventHandler<T>。在C# 2.0泛型出现之前,EventHandler对C#中最常见的事件处理函数进行了签名定义,它指代了这样一些函数,这些函数没有返回值,有两个参数,第一个参数的类型是object,而第二个参数的类型是EventArgs。
在引入泛型之后,.NET Framework加入了EventHandler<T>委托,与EventHandler不同的是,其第二个参数的类型由T指定,而且该类型必须由EventArgs继承。这一点从下面的定义与泛型约束可以看出。
- [Serializable]
- public delegate void EventHandler<TEventArgs>(object sender, TEventArgs e)
- where TEventArgs: EventArgs;
现在再回过头来看上文中“服务器”的例子,在该例中,我们新定义了一个事件委托“ServerEventHandler”,事实上,在C# 2.0中,我们也可以使用EventHandler<ServerEventArgs>委托,效果是完全相同的,因为“ServerEventHandler”与“EventHandler<ServerEventArgs>”所指代的函数具有相同的签名形式。因此,在定义事件的时候,可以采用下面的形式,这样看上去更为规范:
- /// <summary>
- /// 定义一个事件,当服务器正常启动后,触发该事件
- /// </summary>
- public event EventHandler<ServerEventArgs> Started;
- /// <summary>
- /// 定义一个事件,当服务器正常结束后,触发该事件
- /// </summary>
- public event EventHandler<ServerEventArgs> Stopped;
C#基础:事件(二) 【转】的更多相关文章
- C#基础之二
C#基础之二 1. 静态字段.静态成员:由该类的所有实例共享,其变化,实例是对所有可见. 2. 声明为static有:场.方法.属性.构造函数.运营商.事件. 3. 不同的常量静态量:位置,在编 ...
- SuperSocket基础(二)-----一个完成SocketServer项目
SuperSocket基础(二)-----一个完成SocketServer项目 由于时间关系未能及时更新,关于SuperSocket,对于初学者而言,一个SuperSock的Server真的不好写.官 ...
- jQuery基础之二
jQuery基础之二 jQuery的中文文档十分详细,并且权威.W3C的jQuery文档更加简单实用. jQuery 1.9.0 jQuery中文文档W3C的jQuery文档 jQuery操作DO ...
- 进击Node.js基础(二)
一.一个牛逼闪闪的知识点Promise npm install bluebird 二.Promise实例 ball.html <!doctype> <!DOCTYPE html> ...
- jQuery事件篇---基础事件
写在前面: 有一段时间未更新博客了,利用这段时间,重新看了<jQuery基础教程 第四版>和<锋利的jQuery 第二版>,这两本书绝对是jQuery入门非常好的书,值得多读几 ...
- 第一百六十九节,jQuery,基础事件
jQuery,基础事件 学习要点: 1.绑定事件 2.简写事件 3.复合事件 JavaScript 有一个非常重要的功能,就是事件驱动.当页面完全加载后,用户通过鼠标 或键盘触发页面中绑定事件的元素即 ...
- C#学习基础概念二十五问
C#学习基础概念二十五问 1.静态变量和非静态变量的区别?2.const 和 static readonly 区别?3.extern 是什么意思?4.abstract 是什么意思?5.internal ...
- HTML 事件(二) 事件的注册与注销
本篇主要介绍HTML元素事件的注册.注销的方式. 其他事件文章 1. HTML 事件(一) 事件的介绍 2. HTML 事件(二) 事件的注册与注销 3. HTML 事件(三) 事件流.事件委托 4. ...
- Linux基础练习题(二)
Linux基础练习题(二) 1.复制/etc/skel目录为/home/tuer1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限. [root@www ~]# cp -r ...
- 【深入浅出Linux网络编程】 “基础 -- 事件触发机制”
回顾一下“"开篇 -- 知其然,知其所以然"”中的两段代码,第一段虽然只使用1个线程但却也只能处理一个socket,第二段虽然能处理成百上千个socket但却需要创建同等数量的线程 ...
随机推荐
- sroHOBOorz来自HOBO的高精类
/* bigint() bigint(long long) bigint(bigint) bigint(char*) bigint(string) +, +=, ++ -, -=, -- *, *= ...
- JS封装cookie操作函数实例(设置、读取、删除)
本文实例讲述了JS封装cookie操作函数.分享给大家供大家参考,具体如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 ...
- JS~JS里的数据类型
JS里的数据类型,它虽然是个弱类型的语言,但它也有自己的规定的,它不会向其它语言那么,使用int来声明一个整形变量,而是使用 var,如果你是一个C#的开发者,你就会知道,原来C#现在也在和JS学,开 ...
- Agent J(求三个圆围成的区域面积)
A - A Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%lld & %llu Submit Status P ...
- Linux以及Android开发中的小技巧和长繁命令记录收集
不断更新收集中.... 201407161654 ssh以nx_guest的身份登录到172.24.221.137,然后在172.24.221.137与172.24.61.252的8080port建立 ...
- Js apply 方法 具体解释
Js apply方法具体解释 我在一開始看到javascript的函数apply和call时,很的模糊,看也看不懂,近期在网上看到一些文章对apply方法和call的一些演示样例,总算是看的有点眉目了 ...
- java学习之数据库
第一部分:DB2基础知识 一.复习 jre jdk jvm path classpath 二.数据库基础-DB2 1.访问172.22.602.24/ temp 123 2.安装检查 db2cmd d ...
- Android混淆配置文件规范
#打开project.properties文件中的proguard.config. -optimizationpasses 5 # 指定代码的压缩级别 -dontusemixedcaseclassna ...
- 使用CSC.EXE编译第一个HELLO WORLD
坐的没事,下了个C#2008,看帮助文件写了个HELLO.CS的源文件: //hello.cs //Show "Hello Word!" using system; class h ...
- window.showDialog()兼容性处理
ModalDialog 是什么? showModalDialog 是js window对象的一个方法, 和window.open一样都是打开一个新的页面. 区别是: showModalDialog打开 ...