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)

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

}

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

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

class Boss

{

public void static main()

{

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

}

}

5. 其他

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

6. 欢迎大家补充和拍砖~

时间: 2024-12-07 03:11:46

C#中Delegate浅析的相关文章

C#中Delegate浅析与思考

1. 什么是托管函数 托管函数是一个对类里面的某个函数的一个引用.它自己并没有具体的函数定义,只是指向某个函数实现. 2. 与C++, Delphi的横向比较 在C++和Delphi中与托管函数对应的类型是函数指针,形式如下: C++ typedef (int GetNum)(real rNum); Delphi function GetNum(rNum:real): integer; external; 这里定义函数指针,他们所能指向的函数定义的传入参数必须是实型,传出为整形 3. 托管函数有

浅谈jquery中delegate()与live()

  这篇文章主要介绍了浅谈jquery中delegate()与live()的相关资料,需要的朋友可以参考下 delegate() 方法为指定的元素(属于被选元素的子元素)添加一个或多个事件处理程序 例如给id是showspan的div中的span标签添加事件 ? 1 2 3 4 5 6 7 8 9 10 <div id="showspan"><span>showspan**showspan</span></div> <span>

jQuery中delegate与on的用法与区别

 jQuery1.7中 .delegate()已被.on()取代,下面以示例的方式为大家介绍下jQuery中delegate与on的用法与区别,感兴趣的朋友可以参考下 在jQuery1.7中 .delegate()已被.on()取代.对于早期版本,它仍然使用事件委托的最有效手段.  在事件绑定和委派,delegate()和on在一般情况下,这两种方法是等效的.    .delegate() 指定的元素(属于被选元素的子元素)添加一个或多个事件处理程序,并规定当这些事件发生时运行的函数.  代码如

jQuery中delegate和on的用法与区别详细解析

 本篇文章主要是对jQuery中delegate和on的用法与区别进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所帮助 在jQuery1.7中 .delegate()已被.on()取代.对于早期版本,它仍然使用事件委托的最有效手段. 在事件绑定和委派,delegate()和on在一般情况下,这两种方法是等效的.   .delegate() 指定的元素(属于被选元素的子元素)添加一个或多个事件处理程序,并规定当这些事件发生时运行的函数.    代码如下: // jQuery 1.4.3+

jquery中事件委派代码分析以及jQuery中delegate和on的用法与区别详细解析

jquery中事件委派我们会使用到delegate与live方法了,下面我就以delegate与live方法为例子给各位分析一下jquery 事件委派的例子吧,希望例子能帮助到各位朋友. 什么是jquery中的事件委派? 在jquery中有一个很重要的概念--事件委派,相信很多搞前端开发的人都听说过,零度逍遥本来对此不是十分理解,但经过一个高人的指点后,才发现这个功能还是蛮强大的,今天就给大家分享一下. 事件委派的定义就是,把原来加给子元素身上的事件绑定在父元素身上,就是把事件委派给父元素. 说

jQuery中delegate和on的用法与区别详细解析_jquery

在jQuery1.7中 .delegate()已被.on()取代.对于早期版本,它仍然使用事件委托的最有效手段.在事件绑定和委派,delegate()和on在一般情况下,这两种方法是等效的. .delegate() 指定的元素(属于被选元素的子元素)添加一个或多个事件处理程序,并规定当这些事件发生时运行的函数. 复制代码 代码如下: // jQuery 1.4.3+$( elements ).delegate( selector, events, data, handler );// jQuer

jQuery中delegate与on的用法与区别示例介绍_jquery

在jQuery1.7中 .delegate()已被.on()取代.对于早期版本,它仍然使用事件委托的最有效手段. 在事件绑定和委派,delegate()和on在一般情况下,这两种方法是等效的. .delegate() 指定的元素(属于被选元素的子元素)添加一个或多个事件处理程序,并规定当这些事件发生时运行的函数. 复制代码 代码如下: // jQuery 1.4.3+ $( elements ).delegate( selector, events, data, handler ); // jQ

jQuery中delegate()方法用法实例_jquery

本文实例讲述了jQuery中delegate()方法用法.分享给大家供大家参考.具体分析如下: 此方法为匹配元素的子元素添加一个或多个事件,并规定当这些事件发生时运行的函数. 语法结构: 复制代码 代码如下: $(selector).delegate(childofselector,type,data,function) 参数列表: 参数 描述 childofselector 定义要附加事件处理程序的一个或多个子元素. type 可选.定义附加到元素的一个或多个事件类型.由空格分隔多个事件值.

asp.net开发中 Delegate,Action,Func,Predicate的区别

asp教程.net开发中 Delegate,Action,Func,Predicate的区别 类似Linq,Lamda表达式等许多新的程序写法层次不穷.与之相关的Delegate,Action,Func,Predicate的使用和区别也常常让大家迷惑,此处就结合实际的应用,对其进行详细的说明. 在书写代码时,常常会用到委托,这个在winform下较常见,但自定义Delegate时,我们常常发现Delegate必须全局可见,才能在需要的地方进行使用,而对于私有的delegate对象,在本类中进行使