using
System;
namespace
MyCollections 
{
using System.Collections;
// 用于对更改通知进行挂钩的委托类型。
public delegate void ChangedEventHandler(object sender, EventArgs e); // 此处可以不使用ChangedEventHandler,而使用系统定义的委托EventHandler
// 一个类,其作用与 ArrayList 相似,
// 但在每次列表更改时发送通知。
public class ListWithChangedEvent: ArrayList 
{
// 一个事件,每当列表元素更改时,客户端可利用该事件
// 获得通知。
public event ChangedEventHandler Changed;
// 调用 Changed 事件;每当列表更改时调用
protected virtual void OnChanged(EventArgs e) 
{
if (Changed != null)
Changed(this, e);
}
// 重写可更改列表的某些方法;
// 在每个重写后调用事件
public override int Add(object value) 
{
int i = base.Add(value);
OnChanged(EventArgs.Empty);
return i;
}
public override void Clear() 
{
base.Clear();
OnChanged(EventArgs.Empty);
}
public override object this[int index] 
{
set 
{
base[index] = value;
OnChanged(EventArgs.Empty);
}
}
}
}

namespace
TestEvents 
{
using MyCollections;
class EventListener 
{
private ListWithChangedEvent List;
public EventListener(ListWithChangedEvent list) 
{
List = list;
// 将“ListChanged”添加到“List”中的 Changed 事件。
List.Changed += new ChangedEventHandler(ListChanged);
}
// 每当列表更改时就会进行以下调用。
private void ListChanged(object sender, EventArgs e) 
{
Console.WriteLine("This is called when the event fires.");
}
public void Detach() 
{
// 分离事件并删除列表
List.Changed -= new ChangedEventHandler(ListChanged);
List = null;
}
}
class Test 
{
// 测试 ListWithChangedEvent 类。
public static void Main() 
{
// 创建新列表。
ListWithChangedEvent list = new ListWithChangedEvent();
// 创建一个类,用于侦听列表的更改事件。
EventListener listener = new EventListener(list);
// 在列表中添加和移除项。
list.Add("item 1");
list.Clear();
listener.Detach();
}
}
}
毛毛的小窝
转载于:https://www.cnblogs.com/mjgforever/archive/2007/05/17/749811.html
最后
以上就是酷酷衬衫最近收集整理的关于侦听列表(ArrayList)的更改的全部内容,更多相关侦听列表(ArrayList)内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复