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
     
  • 相关阅读:
    /dev/sdxx is apparently in use by the system; will not make a filesystem here! 解决方法
    device mapper的使用
    linux中挂载硬盘报错(you must specify the filesystem type)
    Linux系统分区方案建议
    正确配置Linux系统ulimit值的方法
    ulimit -c unlimited
    ulimit -n 修改
    修改Linux内核参数,减少TCP连接中的TIME-WAIT
    sysctl -P 报错解决办法
    linux 内核参数调整优化网络
  • 原文地址:https://www.cnblogs.com/llbofchina/p/434183.html
Copyright © 2011-2022 走看看