扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
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.其他
正如你们所见的,上面的两个类中的方法,一个是静态,一个不是静态的。托管函数所指的函数可以是静态的也可以不是静态的。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者