`
zbw
  • 浏览: 46018 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

事件和委托(MSDN)

    博客分类:
  • NET
阅读更多

事件是对象发送的消息,以发信号通知操作的发生。操作可能是由用户交互(例如鼠标单击)引起的,也可能是由某些其他的程序逻辑触发的。引发事件的对象称为事件发送方。捕获事件并对其作出响应的对象叫做事件接收方。

在事件通信中,事件发送方类不知道哪个对象或方法将接收到(处理)它引发的事件。所需要的是在源和接收方之间存在一个媒介(或类似指针的机制)。.NET Framework 定义了一个特殊的类型(Delegate),该类型提供函数指针的功能。

委托是可保存对方法的引用的类。与其他的类不同,委托类具有一个签名,并且它只能对与其签名匹配的方法进行引用。这样,委托就等效于一个类型安全函数指针或一个回调。虽然委托具有许多其他的用途,但这里只讨论委托的事件处理功能。一个委托声明足以定义一个委托类。声明提供委托的签名,公共语言运行库提供实现。下面的示例显示了事件委托声明。

c# 代码
  1. public delegate void AlarmEventHandler(object sender, AlarmEventArgs e);  

该语法与方法声明的语法相似,但是 delegate 关键字通知编译器 AlarmEventHandler 是一个委托类型。按照约定,.NET Framework 中的事件委托有两个参数:引发事件的源和该事件的数据。

AlarmEventHandler 委托的实例可以绑定到任何一个与其签名匹配的方法上,例如下面的示例中显示的 WakeMeUp 类的 AlarmRang 方法。

public class WakeMeUp 
{
    // AlarmRang has the same signature as AlarmEventHandler.
    public void AlarmRang(object sender, AlarmEventArgs e)
    {...};
    ...
}

只有当事件生成事件数据时才需要自定义事件委托。许多事件,包括一些用户界面事件(例如鼠标单击)在内,都不生成事件数据。在这种情况下,类库中为无数据事件提供的事件委托 System.EventHandler 便足够了。其声明如下。

C#
delegate void EventHandler(object sender, EventArgs e);

事件委托是多路广播的,这意味着它们可以对多个事件处理方法进行引用。有关详细信息,请参见 Delegate。委托考虑了事件处理中的灵活性和精确控制。通过维护事件的已注册事件处理程序列表,委托为引发事件的类担当事件发送器的角色。

有关使用委托在您的组件或控件中提供事件功能的详细信息,请参见引发事件

有关在您的应用程序中使用事件的概述,请参见使用事件

分享到:
评论

相关推荐

    Modern C#(11):深入“委托和事件” (Level 300)

    Modern C#(11):深入“委托和事件” (Level 300) 讲 师:俞晖 MSDN 特邀讲师 课程简介:本次课程是系列课程《现代软件开发——使用.NET与C#》的第十一讲(即重开第一讲), 这次系列讲座的目的是为希望从...

    MSDN 中的图形元素和文档约定

    MSDN 中的图形元素和文档约定:类、接口、结构、委托、枚举等。 只是一张图片。表示类等在msdn中的表示。

    C# 编程指南 [微软官方 MSDN 节选]

    委托(C# 编程指南) 事件(C# 编程指南) 泛型(C# 编程指南) LINQ 查询表达式(C# 编程指南) Lambda 表达式(C# 编程指南) 迭代器(C# 编程指南) 命名空间(C# 编程指南) 可空类型(C# 编程指南) 不安全代码...

    MSDN CS参考.zip

    委托(C# 编程指南) 事件(C# 编程指南) 泛型(C# 编程指南) LINQ 查询表达式(C# 编程指南) Lambda 表达式(C# 编程指南) 迭代器(C# 编程指南) 命名空间(C# 编程指南) 可空类型(C# 编程...

    面试要回答的委托.pdf

    一、 委托 设想,如果我们写了一个厨师做菜方法用来做菜,里面有 拿菜、切菜、配菜、炒菜 四个环节,但编写此方法代码的人想让 配菜 这个环节让调用方法的人实现,换句话说,就是想在方法被调用时接收 ...”-- 引自MSDN

    MSDN上的C#.NET教程(part11)

    MSDN讲师的C#.NET教程 《现代软件开发——使用.NET和C#》 11-深入委托设计.rar

    深入理解C#中常见的委托

    关于委托的定义和使用,已经有诸多的人讲解过,并且讲解细致入微。我就不用多废话了。今天我要说的是C#中的三种委托方式:Func委托,Action委托,Predicate委托以及这三种委托的常见使用场景。Func,Action,Predicate...

    C#委托实例

    本实例根据MSDN学习资料做的,可以为想要了解这方面的提供学习

    深入理解C#中的Delegate

    因为在Windows应用程序中,对事件的使用非常频繁,而事件的实现依赖于delegate。 下面是对网上一些比较好的关于delegage的资料的整理,以及自己的一些想法。 Delegate是什么?  Delegate中文翻译为“委托”。Msdn...

    【。net 专业】 面试题

    在您的 Global.asax.cs 中写一个事件处理器导入这个 Xml Web Service 相应的 .wsdl 和 .disco 文件。 26.您要创建一个ASP.NET应用程序在DataGrid控件中显示一个经过排序的列表。产品数据被存放于一个名为PubBase的...

    C#线程委托实现原理及方法解析

    很多时候写windows程序都需要结合多线程,在C#中用如下得代码来创建并启动一个新的线程。...可以参考MSDN中的描述。 “Windows 窗体”使用单线程单元 (STA) 模型,因为“Windows 窗体”基于本机Win32

    C#多线程不阻塞

    后玩委托、 线程和异步调用的这么久,这是一种罪恶不分享我的智慧和知识对这个问题的一些因此希望,你 won�t 找一个 MSDN 文章在 1 AM 不知道为什么在你决定去到计算机。 我会尝试使用婴儿步骤和大量的 examples�...

    DelegateEventDemo

    里边包含五个例子,都是结合我Blog的委托和实例入门系列做的Demo,另外是MSDN:ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.VisualStudio.v80.chs/dv_cssample/local/sampleexecutables/Events.zip 给的范例

    .NET笔记之:Delegate内部原理的分析

    有关于委托的详细介绍,大家可以参考MSDN中作出的介绍,链接为:http://msdn.microsoft.com/zh-cn/library/vstudio/ms173171.aspx。这里我就不做具体介绍了;  这篇文章我主要是想告诉大家委托的内部到底是什么样的...

    [ASP.NET.AJAX编程参考手册(涵盖ASP.NET.3.5及2.0)].(美)霍斯拉维.扫描版.pdf

    6.4 委托 6.4.1 Namespace 6.4.2 Mover 6.4.3 TextProvider 6.4.4 ImageProvider 6.5 DomEvent 6.5.1 构造函数 6.5.2 静态方法 6.5.3 实例方法 6.6 使用DomEvent类 6.6.1 Mover 6.6.2 TableProvider 6.7 小结 第7章 ...

    C# 编程指南 C# 随身参考 Wego开发组专用

    提供对存储在 MSDN 上的 C# 相关知识库文章的动态搜索。 Visual C# 提供 Visual C# 文档门户。 Visual C# 示例 提供 Visual C# 示例的列表和有关如何在本地磁盘上查找这些示例的说明。 Visual C# 代码编辑器功能 ...

    awesome-analyzers:.NET编译器平台(“ Roslyn”)诊断分析器和代码修补的精选列表。 每个人都可以在这里贡献力量!

    入门如何创建您的第一个分析仪-Alex Turner MSDN杂志》 -Alex Turner撰写的《 MSDN杂志》 -Roslyn Wiki分析仪热门分析仪列表 -C#和VB的分析器库,使用Roslyn进行重构,代码分析和其他功能使用.NET编译器平台的...

    asp.net面试题

    msdn2005中是这样解释的: 委托具有以下特点: 委托类似于 C++ 函数指针,但它是类型安全的。 委托允许将方法作为参数进行传递。 委托可用于定义回调方法。 委托可以链接在一起;例如,可以对一个事件调用多个...

    C#版Mofile采集器源代码

    软件设计使用了多线程及线程间控件的委托调用,还有操作ini文件(网上找的类),读系统MAC地址,操作数据库等代码,对于C#的开发入门,不失为一个很好的例子,如果有兴趣的,可以自己研究研究,调试调试...如果有问题,欢迎留言...

Global site tag (gtag.js) - Google Analytics