zoukankan      html  css  js  c++  java
  • 创建符合 .NET Framework 准则的事件(C# 编程指南) msdn

    代码
    // 版权所有 (C) Microsoft Corporation。保留所有权利。

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

    // 用于对更改通知进行挂钩的委托类型。
    public delegate void ChangedEventHandler(object sender, EventArgs e);

    // 一个类,其作用与 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();
    Console.ReadKey();
    }
    }
    }
  • 相关阅读:
    java例程练习(多态/动态绑定/迟绑定)
    java例程练习(对象转型及instanceof关键字)
    java例程练习(对象类型数据的排序)
    java例程练习(数三退一[用数组模拟])
    SSL协议与数字证书原理
    SSL和数字证书服务慨述(3)
    数字证书介绍
    SSL和数字证书服务慨述(1)
    SSL和数字证书服务慨述(2)
    如何设置word页脚中的总页码
  • 原文地址:https://www.cnblogs.com/wucg/p/1724565.html
Copyright © 2011-2022 走看看