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