C# -- delegate 与 event 解析
来源:互联网 发布:淘宝中差评处理 编辑:程序博客网 时间:2024/05/17 04:21
/// <summary>/// Delegate是类型,Event是成员(本质为成员方法),Event成员类型派生于Delegate/// </summary>namespace MyEvent{ //1.声明委托的类型 public delegate void ChangedEventHandler(object sender,EventArgs e); //2.列表,当列表数据发生变化的时候会改变 --> Changed --> 通知委托它的事件 public class ListWithChangedEvent : ArrayList { //委托的实例 -- event!!! public event ChangedEventHandler Changed; public override int Add(object value) { int i = base.Add(value); OnChanged(EventArgs.Empty);//4.只是封装了一下下,本质上就是 --> Changed(this, e); return i; } public override void Clear() { base.Clear(); OnChanged(EventArgs.Empty); } protected virtual void OnChanged(EventArgs e) { if (Changed != null) Changed(this, e); } public override object this[int index] { set { base[index] = value; OnChanged(EventArgs.Empty); } } } //5.监听列表变化,添加委托,一旦发生变化,会调用这里边的回掉方法 class EventListener { private ListWithChangedEvent List; //6.传入要坚挺的列表对象 public EventListener(ListWithChangedEvent list) { List = list; //委托 --> 注册监听 --> 委托直接传入方法,实际上添加的是方法的地址 --> eg:传入的方法不需要括号,明白没? List.Changed += new ChangedEventHandler(ListChanged); } //参数域返回值都必须与委托声明的一致,列表变化回掉的方法 private void ListChanged(object sender, EventArgs e) { Console.WriteLine("This list is changed."); } public void Dettach() { List.Changed -= new ChangedEventHandler(ListChanged); List = null; } } class Program { static void Main(string[] args) { //初始化委托 ListWithChangedEvent list = new ListWithChangedEvent(); //添加委托 EventListener listener = new EventListener(list); list.Add("1"); list.Clear(); listener.Dettach(); list.Add("2"); Console.ReadKey(); } }}
1 0
- C# -- delegate 与 event 解析
- C#中的delegate 与event(一)
- C#委托(delegate与事件(Event)
- C#委托delegate与事件event
- C#中的delegate与event简单讲解
- C#委托(delegate与事件(Event)
- C# delegate event 例子
- C# delegate event关系
- C# delegate event
- C# delegate event
- Delegate 与 Event
- C# delegate和C# event
- C#委托(delegate)与事件(event)
- C#委托(delegate)与事件(event)
- C#委托(delegate)与事件(event)
- c#中的委托与事件delegate and event
- C#之委托(delegate)与事件(event)
- C#中的delegate和event
- Myeclipse2016jsp中文乱码问题的解决方法
- 思考专注力
- 151. Reverse Words in a String
- Android Studio 新建或者导入项目出现"building gradle project info"一直卡住的解决方法
- 教育人们通过什么方法保护自己,通过什么方法制裁对方。
- C# -- delegate 与 event 解析
- love
- Ubuntu linux 环境基本使用
- 二、webpack的基本配置(1)
- 51Nod 1091 线段的重叠 (区间贪心
- POJ-3461 Oulipo
- love.audio
- asp.net core mvc剖析:mvc动作选择
- 标识符的作用范围,变量的声明和定义,auto,register自动变量,代码作用域的静态变量