您的位置:首页 > 其它

.NET中的委托与事件——之简单入门

2008-10-23 15:29 423 查看
一、什么是委托
下面引用自 MSDN

委托类型声明的格式如下:

public delegate void TestDelegate(string message);

delegate 关键字用于声明一个引用类型,该引用类型可用于封装命名方法或匿名方法。委托类似于 C++ 中的函数指针;但是,与函数指针不同,委托是面向对象和类型安全的。

通过将委托与命名方法或匿名方法关联,可以实例化委托。与之关联的匿名方法必须除了方法名之外参数类型、参数个数、参数顺序和返回值都必须和声明的委托类型保持一致。

对于可隐式转换的参数和返回值类型处理可查阅 MSDN。

看看《.NET 大局观》第2版中对委托的定义:委托是指向方法的一个安全可靠的指针。所有 delegate 都继承自一个共同的 System.Delegate 类型,通常用于事件的处理和回调(callbacks)。每个委托都关联一系列成员,称为调用列表(invocation list)。一旦委托被调用,列表中的每一个成员也都会被调用,并获得委托所收到的参数。

二、委托是什么?

上面已经提到了什么是委托,现在又反问了委托是什么,这不是吃饱饭没事做忽悠人吗?

当然不是,上面的问题是从委托本身狭小的范围来说事的,现在是要在超出委托定义的范围来说明。

为了看清委托的真面目,我们来创建一个委托类型

namespace DelegateAndEventTest

{

public delegate void SampleDelegate(string message);

}

再用 ildasm 打开编译后的 dll 查看生成的 IL 代码,结果如下:

using System;

namespace DelegateAndEvent

using System;

namespace DelegateAndEvent

using System;

namespace DelegateAndEvent

程序输出结果:

我要开始走动了

我走啊走啊走啊走....

我已经走到 x=10 y=20 的位置

我已经走到了尽头

信息来源:http://www.cnblogs.com/yyw84/archive/2006/12/27/604544.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: