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的更多相关文章

  1. 事件,继承EventArgs带有参数的委托

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  2. C#事件の.net下的EventArgs和EventHandler

    事件参数(EventArgs) .Net框架里边提供的一个委托EventHandler来Handle事件. 一样,搞一个场景(这个场景是书里的):买车.经销商(CarDealer)会上新车(NewCa ...

  3. 在之前的EventHandler中的参数类型必须继承EventArgs,现在已经去掉这个约束了。

    分别是vs2008和vs2012的对比,可以看到2012已经去掉了约束条件.

  4. C#知识体系(二)用案例来理解委托与事件

    上一篇博客讲到了LinQ和lambda的常用方法 还有很多我们未知但c#设计团队已经为我们封装好的类和方法.随着我们不断的熟悉C#语言,渐渐的就会接触到其他的知识点,委托.事件.反射.线程.同步,异步 ...

  5. 委托与事件代码详解与(Object sender,EventArgs e)详解

    委托与事件代码详解 using System;using System.Collections.Generic;using System.Text; namespace @Delegate //自定义 ...

  6. C#委托和事件 EventHandle和EventArgs

    一.背景由于对于C#委托和事件理解的不够透彻,并且平时工作中对于自己手写委托和事件很少,渐渐的只会增删改查了.特定整理了委托和事件的基本知识.二.案例案例引用了张逸 博客 中的案例,并做了处理. 创建 ...

  7. Qt使用一个事件队列对所有发出的事件进行维护(QObject的event()函数相当于dispatch函数),用EventLabel 继承QLabel作为例子(简单明了) good

    事件(event)是由系统或者 Qt 本身在不同的时刻发出的.当用户按下鼠标.敲下键盘,或者是窗口需要重新绘制的时候,都会发出一个相应的事件.一些事件在对用户操作做出响应时发出,如键盘事件等:另一些事 ...

  8. C#基础篇 - 理解委托和事件

    1.委托 委托类似于C++中的函数指针(一个指向内存位置的指针).委托是C#中类型安全的,可以订阅一个或多个具有相同签名方法的函数指针.简单理解,委托是一种可以把函数当做参数传递的类型.很多情况下,某 ...

  9. .NET面试题系列[7] - 委托与事件

    委托和事件 委托在C#中具有无比重要的地位. C#中的委托可以说俯拾即是,从LINQ中的lambda表达式到(包括但不限于)winform,wpf中的各种事件都有着委托的身影.C#中如果没有了事件,那 ...

随机推荐

  1. 修改ip脚本

    1.打开运行 2.输入CMD 3.在命令提示符下输入: netsh -c interface ip dump > C:\我的网络配置.txt 4.打开您在C:\ 下的"我的网络配置 . ...

  2. 面向对象设计SOLID五大原则

    转载自:码农社区,http://w3croom.com/read.php?tid-4522.html 今天我给大家带来的是面向对象设计SOLID五大原则的经典解说.       我们知道,面向对象对于 ...

  3. Android -- View

    setContentView                                                                        只要你使用过Activity ...

  4. Careercup - Microsoft面试题 - 5204967652589568

    2014-05-11 23:57 题目链接 原题: identical balls. one ball measurements ........ dead easy. 题目:9个看起来一样的球,其中 ...

  5. android 开发 socket发送会有部分乱码,串码,伴随着数据接收不完整

    场景: 客户端A.B,A向B发送json字符串后紧接着发送文件,B接收到文件后才返回消息. 环境:android.使用的是原始的write 和read (若使用的是writeUTF不会出现此问题.)需 ...

  6. 前端之JavaScript第一天学习(1)-JavaScript 简介

    javaScript 是世界上最流行的编程语言. 这门语言可用于 HTML 和 web,更可广泛用于服务器.PC.笔记本电脑.平板电脑和智能手机等设备. JavaScript 是脚本语言 JavaSc ...

  7. 在listener或者工具中使用spring容器中的bean实例

    在项目中经常遇见需要在Listener中或者工具中使用Spring容器中的bean实例,由于bean不能在stataic的类中使用. 介绍一种方式: public class SpringTool { ...

  8. MyEclipse2015 编写js报 'Calculating completion proposals..' has encountered a problem.

    前言:编写js(按点后)弹出这个鬼东西,百度不到..估计是破解有问题.只有换版本了. 版本:MyEclipse 2015 stable 1.0 详细错误信息 解决:换成2.0版本

  9. 【CentOS】cp显示进度条

    问题描述: 使用CentOS的cp时,对于大文件的拷贝或者mv,需要等待很长时间,现在需要显示cp或mv的进度 问题解决: Advanced copy 参考官网:http://beatex.org/w ...

  10. Linux - 常用命令行(一)

    今天和大家分享一些最基本常用命令行:也是作为新手最应该了解掌握的 ls 命令:用来显示指定工作目录下内容 dir命令:与ls命令一致 cd  命令:变化工作目录 pwd命令:显示用户当前的工作路径,显 ...