• ylbtech-LanguageSamples-Events(事件)


    ylbtech-Microsoft-CSharpSamples:ylbtech-LanguageSamples-Events(事件)

     

    1.A,示例(Sample) 返回顶部

    “事件”示例

    本示例演示如何在 C# 中声明、调用和配置事件。有关其他信息,请参见事件(C# 编程指南)。

    安全说明

    提供此代码示例是为了阐释一个概念,它并不代表最安全的编码实践,因此不应在应用程序或网站中使用此代码示例。对于因将此代码示例用于其他用途而出现的偶然或必然的损害,Microsoft 不承担任何责任。

    在 Visual Studio 中生成并运行“事件”示例

    1. 在“解决方案资源管理器”中,右击“Events1”项目并单击“设为启动项目”。

    2. 在“调试”菜单上单击“开始执行(不调试)”。

    3. 对于 Events2,请重复前面的步骤。

    从命令行生成并运行“事件”示例

    1. 使用“更改目录”命令转到“Events1”目录。

    2. 键入以下命令:

      csc events1.cs
      events1
    3. 使用“更改目录”命令转到“Events2”目录。

    4. 键入以下命令:

      csc events2.cs
      events2
    1.B,示例代码(Sample Code)返回顶部

    1.B.1, events1.cs

    // 版权所有(C) Microsoft Corporation。保留所有权利。
    // 此代码的发布遵从
    // Microsoft 公共许可(MS-PL,http://opensource.org/licenses/ms-pl.html)的条款。
    //
    //版权所有(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();
          }
       }
    }
    View Code

    1.B.2,

    1.B,示例代码2(Sample Code)返回顶部

    1.B.1, events2.cs

    // 版权所有(C) Microsoft Corporation。保留所有权利。
    // 此代码的发布遵从
    // Microsoft 公共许可(MS-PL,http://opensource.org/licenses/ms-pl.html)的条款。
    //
    //版权所有(C) Microsoft Corporation。保留所有权利。
    
    // events2.cs
    using System;
    namespace MyCollections 
    {
       using System.Collections;
    
       // 一个类,其作用与 ArrayList 类似,
       // 但在每次列表更改时发送通知:
       public class ListWithChangedEvent: ArrayList 
       {
          // 一个事件,每当列表元素更改时,客户端可利用该事件
          // 获得通知:
          public event EventHandler 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 EventHandler(ListChanged);
          }
    
          // 每当列表更改时就会进行以下调用:
          private void ListChanged(object sender, EventArgs e) 
          {
             Console.WriteLine("This is called when the event fires.");
          }
    
          public void Detach() 
          {
             // 分离事件并删除列表:
             List.Changed -= new EventHandler(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();
          }
       }
    }
    View Code

    1.B.2,

    1.C,下载地址(Free Download)返回顶部
    warn 作者:ylbtech
    出处:http://ylbtech.cnblogs.com/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    JAVA RMI调用实战学习
    linux下关于压缩、解压相关的操作
    关于hessian接口类方法顺序及对象序列化的实战研究
    Java对象引用传递探索
    mysql 语句or效率问题
    树莓派做下载服务器 aria2 篇
    免费 cdn
    搞定迅雷固件在TP-LINK WR720N,127.0.0.1 9000 获取不到激活码
    Mware vCenter Server 识别固态硬盘为(非SSD)是什么原因?
    XXX esx.problem.syslog.nonpersistent.formatOnHost not found XXX
  • 原文地址:https://www.cnblogs.com/ylbtech/p/4196992.html
Copyright © 2020-2023  润新知