侦听列表(ArrayList)的更改
 using System;
using System; namespace MyCollections
namespace MyCollections  {
{ using System.Collections;
   using System.Collections;
 // 用于对更改通知进行挂钩的委托类型。
   // 用于对更改通知进行挂钩的委托类型。 public delegate void ChangedEventHandler(object sender, EventArgs e); // 此处可以不使用ChangedEventHandler,而使用系统定义的委托EventHandler
    public delegate void ChangedEventHandler(object sender, EventArgs e); // 此处可以不使用ChangedEventHandler,而使用系统定义的委托EventHandler
 // 一个类,其作用与 ArrayList 相似,
   // 一个类,其作用与 ArrayList 相似, // 但在每次列表更改时发送通知。
   // 但在每次列表更改时发送通知。 public class ListWithChangedEvent: ArrayList
   public class ListWithChangedEvent: ArrayList  {
   { // 一个事件,每当列表元素更改时,客户端可利用该事件
      // 一个事件,每当列表元素更改时,客户端可利用该事件 // 获得通知。
      // 获得通知。 public event ChangedEventHandler Changed;
      public event ChangedEventHandler Changed;
 // 调用 Changed 事件;每当列表更改时调用
      // 调用 Changed 事件;每当列表更改时调用 protected virtual void OnChanged(EventArgs e)
      protected virtual void OnChanged(EventArgs e)  {
      { if (Changed != null)
         if (Changed != null) Changed(this, e);
            Changed(this, e); }
      }
 // 重写可更改列表的某些方法;
      // 重写可更改列表的某些方法; // 在每个重写后调用事件
      // 在每个重写后调用事件 public override int Add(object value)
      public override int Add(object value)  {
      { int i = base.Add(value);
         int i = base.Add(value); OnChanged(EventArgs.Empty);
         OnChanged(EventArgs.Empty); return i;
         return i; }
      }
 public override void Clear()
      public override void Clear()  {
      { base.Clear();
         base.Clear(); OnChanged(EventArgs.Empty);
         OnChanged(EventArgs.Empty); }
      }
 public override object this[int index]
      public override object this[int index]  {
      { set
         set  {
         { base[index] = value;
            base[index] = value; OnChanged(EventArgs.Empty);
            OnChanged(EventArgs.Empty); }
         } }
      } }
   } }
}
 namespace TestEvents
namespace TestEvents  {
{ using MyCollections;
   using MyCollections;
 class EventListener
   class EventListener  {
   { private ListWithChangedEvent List;
      private ListWithChangedEvent List;
 public EventListener(ListWithChangedEvent list)
      public EventListener(ListWithChangedEvent list)  {
      { List = list;
         List = list; // 将“ListChanged”添加到“List”中的 Changed 事件。
         // 将“ListChanged”添加到“List”中的 Changed 事件。 List.Changed += new ChangedEventHandler(ListChanged);
         List.Changed += new ChangedEventHandler(ListChanged); }
      }
 // 每当列表更改时就会进行以下调用。
      // 每当列表更改时就会进行以下调用。 private void ListChanged(object sender, EventArgs e)
      private void ListChanged(object sender, EventArgs e)  {
      { Console.WriteLine("This is called when the event fires.");
         Console.WriteLine("This is called when the event fires."); }
      }
 public void Detach()
      public void Detach()  {
      { // 分离事件并删除列表
         // 分离事件并删除列表 List.Changed -= new ChangedEventHandler(ListChanged);
         List.Changed -= new ChangedEventHandler(ListChanged); List = null;
         List = null; }
      } }
   }
 class Test
   class Test  {
   { // 测试 ListWithChangedEvent 类。
      // 测试 ListWithChangedEvent 类。 public static void Main()
      public static void Main()  {
      { // 创建新列表。
      // 创建新列表。 ListWithChangedEvent list = new ListWithChangedEvent();
      ListWithChangedEvent list = new ListWithChangedEvent();
 // 创建一个类,用于侦听列表的更改事件。
      // 创建一个类,用于侦听列表的更改事件。 EventListener listener = new EventListener(list);
      EventListener listener = new EventListener(list);
 // 在列表中添加和移除项。
      // 在列表中添加和移除项。 list.Add("item 1");
      list.Add("item 1"); list.Clear();
      list.Clear(); listener.Detach();
      listener.Detach(); }
      } }
   } }
}
毛毛的小窝
posted on 2007-05-17 10:44 mjgforever 阅读(357) 评论(0) 收藏 举报
 
                    
                     
                    
                 
                    
                 
 
        

 
    
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号