zoukankan      html  css  js  c++  java
  • C# 2.0学习之事件1

    //Copyright (C) Microsoft Corporation.  All rights reserved.

    // events1.cs
    using System;
    namespace MyCollections
    {
       using System.Collections;

       // A delegate type for hooking up change notifications.
       public delegate void ChangedEventHandler(object sender, EventArgs e);

       // A class that works just like ArrayList, but sends event
       // notifications whenever the list changes.
       public class ListWithChangedEvent: ArrayList
       {
          // An event that clients can use to be notified whenever the
          // elements of the list change.
          public event ChangedEventHandler Changed;

          // Invoke the Changed event; called whenever list changes
          protected virtual void OnChanged(EventArgs e)
          {
             if (Changed != null)
                Changed(this, e);
          }

          // Override some of the methods that can change the list;
          // invoke event after each
          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;
             // Add "ListChanged" to the Changed event on "List".
             List.Changed += new ChangedEventHandler(ListChanged);
          }

          // This will be called whenever the list changes.
          private void ListChanged(object sender, EventArgs e)
          {
             Console.WriteLine("This is called when the event fires.");
          }

          public void Detach()
          {
             // Detach the event and delete the list
             List.Changed -= new ChangedEventHandler(ListChanged);
             List = null;
          }
       }

       class Test
       {
          // Test the ListWithChangedEvent class.
          public static void Main()
          {
          // Create a new list.
          ListWithChangedEvent list = new ListWithChangedEvent();

          // Create a class that listens to the list's change event.
          EventListener listener = new EventListener(list);

          // Add and remove items from the list.
          list.Add("item 1");
          list.Clear();
          listener.Detach();
          }
       }
    }


    csc events1.cs
    events1
     
  • 相关阅读:
    Python基础-EMS系统
    python基础-数据结构及数据读取操作
    python基础-猜数游戏
    python基础-质数判断及优化
    利用5次shift漏洞破解win7密码
    python基础-水仙花数判断
    pickle,json ;random,shelve
    block母版继承,include模板导入,inclusion_tag自定义模板
    多道技术,阻塞非阻塞,同步异步,udp,tcp,孤儿僵尸进程
    深度广度继承,抽象类接口,绑定方法,@propertry,继承封装接口多态鸭子类型关系,组合
  • 原文地址:https://www.cnblogs.com/llbofchina/p/434183.html
Copyright © 2011-2022 走看看