ylbtech-LanguageSamples-Events(事件)
ylbtech-Microsoft-CSharpSamples:ylbtech-LanguageSamples-Events(事件) |
1.A,示例(Sample) 返回顶部 |
“事件”示例
本示例演示如何在 C# 中声明、调用和配置事件。有关其他信息,请参见事件(C# 编程指南)。
安全说明 |
---|
提供此代码示例是为了阐释一个概念,它并不代表最安全的编码实践,因此不应在应用程序或网站中使用此代码示例。对于因将此代码示例用于其他用途而出现的偶然或必然的损害,Microsoft 不承担任何责任。 |
在 Visual Studio 中生成并运行“事件”示例
在“解决方案资源管理器”中,右击“Events1”项目并单击“设为启动项目”。
在“调试”菜单上单击“开始执行(不调试)”。
对于 Events2,请重复前面的步骤。
从命令行生成并运行“事件”示例
使用“更改目录”命令转到“Events1”目录。
键入以下命令:
csc events1.cs
events1使用“更改目录”命令转到“Events2”目录。
键入以下命令:
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();
}
}
}
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();
}
}
}
1.B.2,
1.C,下载地址(Free Download)返回顶部 |
![]() |
作者:ylbtech 出处:http://ylbtech.cnblogs.com/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 |
ylbtech-LanguageSamples-Events(事件)的更多相关文章
- ActiveX控件的Events事件
http://labview360.com/article/info.asp?TID=10152&FID=165 Active X函式库 对使用LabVIEW作为开发环境的开发人员来说,如果能 ...
- Node.js:events事件模块
Nodejs的大部分核心API都是基于异步事件驱动设计的,所有可以分发事件的对象都是EventEmitter类的实例. 大家知道,由于nodejs是单线程运行的,所以nodejs需要借助事件轮询,不断 ...
- Laravel 的 Events(事件) 及 Observers(观察者)
你是否听说过单一职责原则(single responsibility principle)?我希望是的.它是程序设计的基本原则之一,它基本上的意思就是,一个类有且只有一个职责.换句话说,一个类必须且只 ...
- events(事件): 基础1
1 所有能触发事件的对象都是 EventEmitter 类的实例. 这些对象开放了一个 eventEmitter.on() 函数,允许将一个或多个函数绑定到会被对象触发的命名事件上. 事件名称通 ...
- Lind.DDD.Events事件总线~自动化注册
回到目录 让大叔兴奋的自动化注册 对于领域事件之前说过,在程序启动时订阅(注册)一些事件处理程序,然后在程序的具体位置去发布(触发)它,这是传统的pub/sub模式的体现,当然也没有什么问题,为了让它 ...
- English trip -- VC(情景课) 6 B Events 事件
xu言: ... 自己选择的路,就算是爬,也要给我爬完.短短人生数载,我能之止于此? Words appointment 预约 meeting 会议 class movie party prog ...
- openwrt gstreamer实例学习笔记(七. gstreamer 缓冲区(Buffers)和事件(Events))
1)概述 管道的数据流由一组缓冲区和事件组成,缓冲区包括实际的管道数据,事件包括控制信息,如寻找信息和流的终止信号.所有这些数据流在运行的时候自动的流过管道. 2) 缓冲区(Buffers) 缓冲区包 ...
- javaScirpt事件详解-原生事件基础(一)
事件 JavaScript与HTML之间的交互是通过事件实现的.事件,就是文档或浏览器窗口中发生的一些特定的交互瞬间,通过监听特定事件的发生,你能响应相关的操作.图片引用:UI Events 事件流 ...
- [DOM Event Learning] Section 2 概念梳理 什么是事件 DOM Event
[DOM Event Learning] Section 2 概念梳理 什么是事件 DOM Event 事件 事件(Event)是用来通知代码,一些有趣的事情发生了. 每一个Event都会被一个E ...
- JavaScipt 事件体系
事件机制 jQuery对事件的绑定分别有几个API .bind()/.live()/.delegate()/.on() 不管是用什么方式绑定,归根到底还是用addEventListener/attac ...
随机推荐
- Local Authentication Using Challenge Response with Yubikey for CentOS 7
Connect Yubikey ,then initialize YubiKey slot 2: ykpersonalize -2 -ochal-resp -ochal-hmac -ohmac-lt ...
- Linux 下编译安装OpenCV【转】
转自:http://www.cnblogs.com/emouse/archive/2013/02/22/2922940.html OpenCV 2.2以后版本需要使用Cmake生成makefile文件 ...
- appium===报错adb server version (31) doesn’t match this client (39); killing…的解决办法
当使用在cmd窗口调用adb shell命令的时候 提示如下: adb server version (31) doesn't match this client (39); killing...er ...
- Android之进程通信--Binder
Cilent从ServiceManger哪里获得BnMediaService的BnBinder引用就可以调用BnMediaPlayerService的方法了,BnMediaPlayerService是 ...
- C# axWindowsMediaPlayer制作播放器
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- ajaxfileupload异步上传文件
ajaxfileupload插件可以以异步方式上传文件(其实现:iframe),不像传统那样需要刷新,下面就介绍下其使用 1.HTML部分(先引入jquery): <!DOCTYPE html& ...
- 优化MySQL插入方法的五个妙招
以下是涉及到插入表格的查询的5种改进方法: 1)使用LOAD DATA INFILE从文本下载数据这将比使用插入语句快20倍. 2)使用带有多个VALUES列表的INSERT语句一次插入几行这将比使用 ...
- BZOJ 3223: Tyvj 1729 文艺平衡树-Splay树(区间翻转)模板题
3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 6881 Solved: 4213[Submit][Sta ...
- RabbitMQ使用介绍(python)
在我们的项目开发过程中,我们有时会有时候有两个或者多个程序交互的情况,当然就会使用到这里的消息队列来实现.现在比较火的就是RabbitMQ,还有一些ZeroMQ ,ActiveMQ 等等,著名的ope ...
- hihocoder1062 最近公共祖先·一
#1062 : 最近公共祖先·一 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho最近发现了一个神奇的网站!虽然还不够像58同城那样神奇,但这个网站仍然让小Ho乐在 ...