中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > .NET > 其他
浅析C#中的Delegate
作者:佚名 时间:2007-09-04 15:35 出处:中国IT实验室  责编:月夜寒箫
              摘要:浅析C#中的Delegate

1.什么是托管函数

托管函数是一个对类里面的某个函数的一个引用。它自己并没有具体的函数定义,只是指向某个函数实现。

2.与C++,Delphi的横向比较



在C++和Delphi中与托管函数对应的类型是函数指针,形式如下:



C++   

            

typedef (int GetNum)(real rNum);

Delphi   

            

function GetNum(rNum:real): integer; external;

这里定义函数指针,他们所能指向的函数定义的传入参数必须是实型,传出为整型。   



3.托管函数有什么用



由于托管函数是对类里面某个函数的一个引用。所以我们不必知道这个函数的具体名字是什么,而只需要调用托管函数,让托管函数去调用相应的函数就可以了。一个例子:一个公司,一个领导,一个领导秘书,三个员工分别管理市场,策划和生产。这里秘书就相当与一个托管函数,领导要下达什么命令(获得市场信息,生产什么产品),只需要对秘书说给我一份市场报告或者我们不生产原子弹转向生产氢弹。然后再由秘书根据领导的命令选择的去找哪个员工,再把员工获得的信息返回给领导。这里面三个员工对于领导是透明的,领导并不知道自己下达的命令具体是由谁执行的。 



4.如何定义和使用

  

接着上面的例子,我们声明一个秘书托管函数原型。

            

class Secretory   

{   

//定义托管函数原型   

private delegate string Do(string command);   

//创建托管函数实例   

public Do Doit;   

//给秘书下达命令执行   

public void ExecuteCommand(string command)   

{   

switch(秘书根据命令判断是要给谁执行的)   

{   

case 调研市场的人:  

Doit=new Do(new MarketMan().GetMarketInfo);   

Break;   

 

Case 生长产品的人:



Doit=new Do(new ProductMan().ProduceProduct);   

Break;   

Default:  

Break;   

}   

}   

Doit(command);   

}   

///调研市场的那个人的类   

class MarketMan   

{   

public string GetMarketInfo(string command)   

{ 根据命令调查信息, 返回获得信息 ;}   

}   

///生产产品的人   

class ProductMan   

{   

public static string ProduceProduct(string command)   

{ 根据命令生产产品,并返回生产工程中的信息;}   

}



ok,那么如何执行呢?老板怎么使用Secretory这个类呢?



go on



老板只需要把秘书叫(new)过来,直接向他下达命令,然后就可以喝茶去了~ ^_^



class Boss   

{   

public void static main()   

{   

(new Secretory()).Doit(“我们要生产氢弹,把以前的原子弹都扔到日本好了”);   

}  

}  

   

5.其他



正如你们所见的,上面的两个类中的方法,一个是静态,一个不是静态的。托管函数所指的函数可以是静态的也可以不是静态的。

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有