您的位置:首页 > 编程语言 > C#

C#之委托概念认识学习笔记

2010-01-27 19:09 232 查看
回调函数是一项非常有用的编程机制,它在程序设计界的应用已有很多年了。Microsoft。NET框架使用一种称作委托(delegate)的技术来提供回调函数机制。与其他平台中使用的回调机制不同,委托为我们提供了更多的功能。例如,委托可以确保回调方法是类型安全的(这是通用语言运行时最重要的目标之一)。委托还集成了按序调用方法的能力,并且同时支持调用静态方法和实例方法。

认识委托

C语言运行时中的qsort就是利用回调函数来对一个数组中的元素进行排序的。在windows中,窗口过程、钩子过程、异步过程调用等都要求使用回调函数。在.NET框架中,回调方法也用于很多场合。例如,我们可以通过登记回调方法来获得各种各样的通知,如未处理的异常、窗口状态的改变、菜单项目的选中、文件系统的变更以及异步操作的完成等。

在非托管C/C++中,函数的地址就是一个内存地址。该地址不会携带任何额外的信息,例如函数期望的参数个数、参数类型、函数的返回值类型以及函数的调用约定。一言以避之,非托管C/C++中的回调函数时非类型安全的。

在.NET框架中,回调函数仍然像在非托管windows编程中一样有用和普遍。但是,.NET框架为回调函数提供了一种称为委托(delegate)的类型安全的机制。在详细讨论委托之前,首先向大家展示一下他们的使用方法。下面的代码演示了怎样声明、创建和使用委托。

using System;

using System.Windows.Forms;

using System.IO;

class Set{

   private Object[] items;

public Set(Int32 numItems){

items=new Object[numItems];

for(Int32 i=0;i<numItems;i++){

items[i]=i;

}

//定义一个Feedback委托类型

//注意:该类型嵌套在Set类中

public delegate void Feedback(Object value,Int32 item,Int32 numItems);

public void ProcessItems(Feedback feedback){

for(Int32 item=0;item<items.Length;item++){

if(feedback!=null){

//如果指定有回调函数,则调用它们

feedback(items[item],item+1,items.Length);

}

}

}

}

class App{

static void main(){

StaticCallbacks();

InstanceCallbacks();

}

...

}

未完待续
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: