我希望你是我独家记忆

一段永远封存的记忆,随风而去
posts - 263, comments - 31, trackbacks - 0, articles - 3
   :: 首页 :: 新随笔 ::  :: 聚合  :: 管理

事件学习

Posted on 2009-08-03 13:45 Hero 阅读(153) 评论(0)  编辑 收藏 引用 所属分类: C#积累
  1 using System;
  2 using System.Collections.Generic;
  3 using System.Text;
  4 
  5 namespace MyCollections
  6 {
  7     using System.Collections;
  8 
  9     //声明委托
 10     public delegate void ChangedEventHandler( object sender, EventArgs e ) ;
 11 
 12     //创建一个新类,每次列表更改时发送通知
 13     public class ListWithChangedEvent : ArrayList
 14     {
 15         //声明一个事件 -- 每当元素列表更改时,客户端可以利用该事件获得通知
 16         public event ChangedEventHandler Changed;
 17 
 18         //调用Changed事件 -- 每当列表更改时调用
 19         protected virtual void OnChanged( EventArgs e )
 20         {
 21             if ( Changed != null ) Changed( this, e );
 22         }
 23 
 24         //重写可更改列表的某些方法 -- 在每个重写后调用事件 -- 面向对象的优点(易于扩展)
 25         public override int Add( object value )
 26         {
 27             int reval = base.Add( value );
 28             OnChanged( EventArgs.Empty );
 29             return reval;
 30         }
 31 
 32         public override void Clear()
 33         {
 34             base.Clear();
 35             OnChanged( EventArgs.Empty );
 36         }
 37 
 38         public override object this[int index]
 39         {
 40             get
 41             {
 42                 return base[index];
 43             }
 44             set
 45             {
 46                 base[index] = value;
 47                 OnChanged( EventArgs.Empty );
 48             }
 49         }
 50     }
 51 }
 52 
 53 namespace TestEvents
 54 {
 55     using MyCollections;
 56 
 57     class EventListener
 58     {
 59         private ListWithChangedEvent List;
 60 
 61         public EventListener( ListWithChangedEvent _list )
 62         {
 63             this.List = _list;
 64             //将“ListChanged”添加到“List”中的Changed事件
 65             this.List.Changed +=new ChangedEventHandler(List_Changed);
 66         }
 67 
 68         //每当列表更改时进行以下调用 -- 事件我们自己写
 69         public void List_Changed( object sender, EventArgs e )
 70         {
 71             Console.WriteLine( "This is called when event fires." );
 72         }
 73 
 74         public void Detach()
 75         {
 76             //分离事件并删除列表
 77             this.List.Changed -= new ChangedEventHandler( List_Changed );
 78             this.List = null;
 79         }
 80     }
 81 }
 82 
 83 namespace Event2
 84 {
 85     using MyCollections;
 86     using TestEvents;
 87 
 88     class Program
 89     {
 90         static void Main( string[] args )
 91         {
 92             //创建新列表
 93             ListWithChangedEvent list = new ListWithChangedEvent();
 94             //创建一个类,用于侦听列表的更改事件
 95             EventListener listener = new EventListener( list );
 96 
 97             list.Add( "wang" );
 98             list.Clear();
 99 
100             listener.Detach();
101         }
102     }
103 }
104 

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理