c# 事件为何要继承EventArgs
1:继承EventArgs是表示该类可作为事件,删掉了就默认继承object,没人会说你错 ----就是说事件不继承EventArgs 也没有错,也能正常运用,那么继承他的意义是什么呢?看2,3。 觉得3的解释让我知道为什么,回过头再看2就明白很多了...
2:至于为什么要继承 EventArgs,这是 .NET 框架的约定。从软件工程的角度,无论你使用 MFC、Windows API、.NET Framework、还是什么库,和系统类库保持一致的编码风格,使得你新增的代码成为核心代码的自然延续都是首推的最佳实践。
3:不妨看一下最常见的click事件
private void button1_Click(object sender, EventArgs e)...
微软为什么不把EventArgs写成int或string?因为他在定义事件的时候不能确定事件所需参数的确切类型。所以抽象出一个类型。那直接写成object不也可以吗?完全可以,但是两个object参数放到一块会不会有些小迷茫呢,所以微软专门创建了这么一个类。从这点来说,EventArgs更像一种命名规范,任何人看到它都会知道它包含事件数据。这样当你想改变事件参数的个数或类型时,只要自定义一个封装了任意你喜欢的个数和类型的参数,并继承EventArgs的类即可。这样不是挺灵活的吗?对于性能当然不会有什么影响了,它只是个参数类型,而且它本身不包含任何事件数据。
-------一句话,EventArgs更像一种命名规范, 编程的一种系统库提供的一种约定规则,我们自己写的代码,也按照这个规则来,方便别人理解你写的代码的意图。
c# 事件为何要继承EventArgs的更多相关文章
- 事件,继承EventArgs带有参数的委托
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- C#事件の.net下的EventArgs和EventHandler
事件参数(EventArgs) .Net框架里边提供的一个委托EventHandler来Handle事件. 一样,搞一个场景(这个场景是书里的):买车.经销商(CarDealer)会上新车(NewCa ...
- 在之前的EventHandler中的参数类型必须继承EventArgs,现在已经去掉这个约束了。
分别是vs2008和vs2012的对比,可以看到2012已经去掉了约束条件.
- C#知识体系(二)用案例来理解委托与事件
上一篇博客讲到了LinQ和lambda的常用方法 还有很多我们未知但c#设计团队已经为我们封装好的类和方法.随着我们不断的熟悉C#语言,渐渐的就会接触到其他的知识点,委托.事件.反射.线程.同步,异步 ...
- 委托与事件代码详解与(Object sender,EventArgs e)详解
委托与事件代码详解 using System;using System.Collections.Generic;using System.Text; namespace @Delegate //自定义 ...
- C#委托和事件 EventHandle和EventArgs
一.背景由于对于C#委托和事件理解的不够透彻,并且平时工作中对于自己手写委托和事件很少,渐渐的只会增删改查了.特定整理了委托和事件的基本知识.二.案例案例引用了张逸 博客 中的案例,并做了处理. 创建 ...
- Qt使用一个事件队列对所有发出的事件进行维护(QObject的event()函数相当于dispatch函数),用EventLabel 继承QLabel作为例子(简单明了) good
事件(event)是由系统或者 Qt 本身在不同的时刻发出的.当用户按下鼠标.敲下键盘,或者是窗口需要重新绘制的时候,都会发出一个相应的事件.一些事件在对用户操作做出响应时发出,如键盘事件等:另一些事 ...
- C#基础篇 - 理解委托和事件
1.委托 委托类似于C++中的函数指针(一个指向内存位置的指针).委托是C#中类型安全的,可以订阅一个或多个具有相同签名方法的函数指针.简单理解,委托是一种可以把函数当做参数传递的类型.很多情况下,某 ...
- .NET面试题系列[7] - 委托与事件
委托和事件 委托在C#中具有无比重要的地位. C#中的委托可以说俯拾即是,从LINQ中的lambda表达式到(包括但不限于)winform,wpf中的各种事件都有着委托的身影.C#中如果没有了事件,那 ...
随机推荐
- gcc 创建库及使用
gcc -shared hello.c -o libhello.so gcc -o test test.c -L库所在目录 -l库名
- DSP280x的数模转换使用
/*****************************************************************************Copyright: 2013File na ...
- C# 微信公众号
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...
- 【Sort List】cpp
题目: Sort a linked list in O(n log n) time using constant space complexity. 代码: /** * Definition for ...
- 转载------------------关于android的一些技巧
Android eclipse中程序调试 一:断点调试 用eclipse开发android程序的时,跟VS一样是可以断点单步调试的.步骤如下.1 设置断点:在编码窗体的左边框上用鼠标双击,或者右键点击 ...
- HDU 5638 拓扑排序+优先队列
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5638 题意: 给你一个DAG图,删除k条边,使得能个得到字典序尽可能小的拓扑排序 题解: 把拓扑排序 ...
- linux下安装vsftp
1. yum安装vsftp # yum install vsftpd 2. 配置Vsftpd 安装完之后我们要对它进行配置,才能正常使用.编辑vsftpd的配置文件vi /etc/vsftpd/vsf ...
- asp.net 分布式缓存
之前Velocity已被 集成到App Fabric(包含有WCF监控==)中. 网络Velocity使用大多是针对老版本: 老版本的下载地址: http://www.microsoft.co ...
- JavaScript之Throw、Try 、Catch讲解
try 语句测试代码块的错误. catch 语句处理错误. throw 语句创建自定义错误. 错误一定会发生 当 JavaScript 引擎执行 JavaScript 代码时,会发生各种错误: 可能是 ...
- ios frame、bound和center定义及使用场景总结
frame:指的是视图在父视图的坐标系统中的大小和位置. bound:指的是视图在视图本身的坐标系统中的大小(位置起点是原点). center:指的是视图在父视图坐标系统中的中心点. frame和bo ...