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

如题所述

第1个回答  2022-10-18

  \在程序中可见事件源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);

lishixinzhi/Article/program/net/201311/14835

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网