C# -- delegate 与 event 解析
2017-03-16 23:41
337 查看
/// <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(); } } }
相关文章推荐
- C#中的delegate和event
- C#中的delegate和event
- Observer (C# Delegate - Event) - Design Patterns学习笔记(4)
- The relation between event and delegate in visual c#
- C#事件(event)解析[转]
- C#中的delegate和event
- C#中的delegate和event
- C#:代表(delegate)和事件(event)
- C#中的delegate和event (转)
- C#事件(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#事件(event)解析
- C#事件(event)解析