『Spring.NET』IoC 中的事件处理

本文详细介绍了C#中的事件机制,包括事件的基本概念、语法结构、参数使用、实例应用以及配置方式,并通过示例代码展示了如何在IoC环境中注入事件处理程序。

C#中的事件是什么样的?

………………………………………………………………………………………………………………

In C# events are built right into the language thanks to the event keyword. Under the scenes, events are essentially a shorthand notation for delegates with some additional guidelines as to what the parameters to an event handler method should be (i.e. a sender System.Object and an System.EventArgs object).

In use, .NET events are combined with one or more event handler methods. Each handler method is programmatically added, or removed, from the event and corresponds to an object's method that should be invoked when a particular event occurs. When more than one handler method is added to an event, then each of the registered methods will be invoked in turn when an event occurs.

说明:

  1. C#中,事件在本质上使用了「代理」(或者叫委托)
  2. C#中,事件的参数是一个Ojbect型的发送者和一个EventArgs类型的事件信息列表
  3. 使用中,事件混合了一个或多个事件处理方法
  4. 当一个事件发生时,之前加入到这个事件代理的方法会被顺序执行

例如:

    public class EventSource
    {
        public event EventHandler Click;

        public void OnClick()
        {
            if (Click != null)
            {
                Click(this, EventArgs.Empty); // Fire the event off to the registered handler methods
10             }
11         }
12     }    
13     public class EventSourceHandler
14     {
15         public event EventHandler HandlerEvent;
16     }
17
18     public class Test_
19     {
20         void test()
21         {
22             EventSource source = new EventSource();
23             EventSourceHandler eventListener1 = new EventSourceHandler(); // Adding the first event handler method to the event
24             EventSourceHandler eventListener2 = new EventSourceHandler(); // Adding a second event handler method to the event
25
26             source.Click += eventListener1.HandlerEvent;
27             source.Click += eventListener2.HandlerEvent;
28
29             source.OnClick(); // First eventListener1.HandleEvent is invoked, then eventListener2.HandleEvent
30         }
31     }

 

IoC 中,声明事件处理 EventHandler

…………………………………………………………

配置文件:

<object id="eventListener1" type="SpringdotNETEventsExample.TestEventHandler, SpringdotNETEventsExample">
   <!-- wired up to an event exposed on an instance -->
   <listener event="Click" method="HandleEvent">
      <ref object="source"/>
   </listener>
</object>

<object id="eventListener2" type="SpringdotNETEventsExample.TestEventHandler, SpringdotNETEventsExample">
   <!-- wired up to an event exposed on an instance -->
10    <listener event="Click" method="HandleEvent">
11       <ref object="source"/>
12    </listener>
13 </object>

说明:

  • 可以在配置项中使用<listener>标签来标注事件处理程序 
  • event 是事件名称,是一个EventHandler名称 注:EventHandler是一个「代理」类型

第二种配置方式:

1 <object id="eventListener" type="SpringdotNETEventsExample.TestEventHandler, SpringdotNETEventsExample">
2    <listener method="Handle.+">
3       <ref object="source"/>
4    </listener>
5 </object>

说明:

  1. 你可以使用正则表达式来标注method
  2. Handle.+ 就是一个正则表达式

第三种配置方式:

1 <object id="eventListener" type="SpringdotNETEventsExample.TestEventHandler, SpringdotNETEventsExample">
2    <listener method="HandleEvent" event="Cl.+">
3       <ref object="source"/>
4    </listener>
5 </object>

说明:

  1. 你可以在event中使用正则表达式来过滤处理程序
  2. 如上代码所示

其他说明

…………………………………………………………

  1. 这里没有列出后面配置方法的具体实现,这并不是在真正的代码中可以没有
  2. 具体的调用过程,参考上几篇所描述的注入对象的使用,这里的新东西只是事件的注入
  3. 事件处理的注入与方法注入相似
  4. 刘冬.Net 的文章中,是将事件处理注入与方法的注入写到了一起,我是看官方文档中是分开写的,我就分开了,毕竟要以文档为主

 

转载于:https://www.cnblogs.com/sitemanager/archive/2012/02/02/2336083.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值