知识大全 浅析Java与C#的事件处理机制(二)

Posted 事件

篇首语:愿君学长松,慎勿作桃李。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 浅析Java与C#的事件处理机制(二)相关的知识,希望对你有一定的参考价值。

浅析Java与C#的事件处理机制(二)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  \\在程序中可见事件源Model类显式地调用了接口中的modelChanged方法 实际是把事件状态对象e作为参数 传递给了监听者类中的modelChanged方法

  适配类

  适配类是Java事件模型中极其重要的一部分 在一些应用场合 事件从源到监听者之间的传递要通过适配类来 转发 例如 当事件源发出一个事件 而有几个事件监听者对象都可接收该事件 但只有指定对象做出反应时 就要在事件源与事件监听者之间插入一个事件适配器类 由适配器类来指定事件应该是由哪些监听者来响应 适配类成为了事件监听者 事件源实际是把适配类作为监听者注册入监听者队列中 而真正的事件响应者并未在监听者队列中 事件响应者应做的动作由适配类决定 目前绝大多数的开发工具在生成代码时 事件处理都是通过适配类来进行的

  C#事件处理

  在 NET应用程序开发中 不管是WEB Forms(ASP NET)还是Windows Forms 都涉及到大量对象的事件响应及处理 比如客户在线提交一份订单 或是在Windows窗口上移动鼠标等都将有事件发生 那么在C#中 是怎样声明事件并为事件添加响应方法的呢?

  在C#中 事件(Events)成员就是用来声明一个类事件的 在类中声明一个事件成员一般采用如下的语法形式

  public event 代表名 事件名

  如在Control类中声明了一个Click事件成员 其语法如下

  public event EventHandler Click;

  在C#中 增加了一个新的数据类型delegate来解决事件处理问题 代表数据类型非常类似于C语言中的指针 其与指针不同的是 其是代码是安全的 可管理的 由于C#本身的简易性 对于没有使用过C及指针的程序来说 理解delegate也是非常容易的

  在C#中 通过使用delegate 你可以通过 += 操作符非常容易地为 Net对象中的一个事件添加一个甚至多个响应方法 还可以通过非常简单的 = 操作符取消这些响应方法 如下面为temp按钮添加Click事件的语句

  temp Click+=new System EventHandler(this Test);//为test添加事件处理方法

  在上面声明事件的语句中 Eventhandler是一个delegate(代表)类型 其在 Net类库中如下声明的

  public delegate void EventHandler(object sender EventArgs e);

  这样 所有形如:void 函娄名(object 参数名 EventArgs 参数名);的函数都可以作为Control类的Click事件响应方法了 如下面所定义的一个事件响应方法

  private void button _Click(object sender System EventArgs e)

  由于是通过delegate来处理事件 因此 可能通过累加使一个事件具有多个响应方法 与此同时 还可以使一个方法作为多个事件的响应方法(注意 在C#语言类中的event成员后面只能出现 += 与 = 两个表示添加与取消事件响应函数的操作符) 不管是ASP Net还是一般的Windows Forms 编程 在C#中 基本上我们遇到的事件响应方法都是说明成如下的形式

  private void button _Click(object sender System EventArgs e)

  那么 一个事件响应方法的存取权限 返回值类型 参数及类型甚至方法名称等是否都必须固定不变呢?答案是 不是!

  一般情况下 事件的响应方法中都有两个参数 其中一个代表引发事件的对象即sender 由于引发事件的对象不可预知的 因此我们把其声明成为object类型 所有的对象都适用 第二个参数代表引发事件的具体信息 各种类型的事件中可能不同 这要根据类中事件成员的说明决定

  我们知道 事件是通过delegate来处理的 假设将要表示事件说明成如下形式

  delegate int MyEventHandler(object sender ToolBarButtonClickEventArgs e);

  则当涉及上面的事件响应函数声明时 就须要声明成如下的形式

  private int MyTest(object sender ToolBarButtonClickEventArgs e)

  在给对象添加事件响应方法时就可以用如下的代码实现

  Control Event+=new MyEventHandler(MyTest);

cha138/Article/program/net/201311/14835

相关参考

知识大全 浅析Java语言的事件处理快捷回复

浅析Java语言的事件处理快捷回复  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在JAVA程序

知识大全 浅析Java多线程程序设计机制

浅析Java多线程程序设计机制  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  多线程是Java语

知识大全 浅析C#中的套接字编程

浅析C#中的套接字编程  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!大家都知道Java语言的强大功

知识大全 java内省机制

  内省是Java语言对Bean类属性事件的一种处理方法(也就是说给定一个javabean对象我们就可以得到/调用它的所有的get/set方法)  例如类A中有属性name那我们可以通过getName

知识大全 探讨与比较Java和.NET的事件处理框架

探讨与比较Java和.NET的事件处理框架  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!事件驱动模

知识大全 Java中可复用事件处理的设计与实现代码

Java中可复用事件处理的设计与实现代码  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  目前面向

知识大全 C#语言与Java语言程序的比较

C#语言与Java语言程序的比较  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  迈入二十一世纪以

知识大全 ASP.NET控件开发基础之复合控件事件处理浅析

ASP.NET控件开发基础之复合控件事件处理浅析  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 C#中Delegate浅析与思考

C#中Delegate浅析与思考  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &nbs

知识大全 C#中事件处理的个人体会

C#中事件处理的个人体会  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  事件是对象发送的消息以发