委托(delegate):

委托声明定义了一种类型,它用一组特定的参数以及返回类型来封装方法。对于静态方法,委托对象封装要调用的方法。对于实例方法,委托对象同时封装一个实例和该实例上的一个方法。如果您有一个委托对象和一组适当的参数,则可以用这些参数调用该委托。

下面看一段代码:

using System ;

delegate void EatDelegate(string food);

class MyDelegate

{

static void zsEat(string food)

{

Console .WriteLine ("张三吃"+food);

}

static void lsEat(string food)

{

Console .WriteLine ("李四吃"+food);

}

static void wwEat(string food)

{

Console .WriteLine ("王五吃"+food);

}

static void Main()

{

EatDelegate zs=new EatDelegate (zsEat );         //C#2.0语法:

EatDelegate zs=zsEat ;

EatDelegate ls=new EatDelegate (lsEat );

EatDelegate ww=new EatDelegate (wwEat );

EatDelegate eatChain=null;

Console .WriteLine ("座谈会开始");

eatChain = zs+ls+ww;

eatChain ("西瓜");

Console .WriteLine ("李四出去接电话");

eatChain -=ls;

eatChain ("香蕉");

Console .WriteLine ("李四回来了");

eatChain +=ls;

eatChain ("桔子");

//下面是匿名方法¨

eatChain += delegate(string food) {Console .WriteLine ("我吃"+food);   };

eatChain += delegate(string food) {Console .WriteLine ("你吃"+food);   };

eatChain += delegate(string food) {Console .WriteLine ("他吃"+food);   };

eatChain ("饭");

}

}

下面是实例方法的一段代码:

using System ;

delegate void EatDelegate(string food);

class Man

{

private string name;

public Man(string name)

{

this .name =name ;

}

public void eat(string food)

{

Console .WriteLine (name+"吃"+food);

}

}

class Party

{

static void Main()

{

Man ZS=new Man ("张三");

Man LS=new Man ("李四");

Man WW=new Man ("王五");

EatDelegate zs=new EatDelegate (ZS.eat );

EatDelegate ls=new EatDelegate (LS.eat );

EatDelegate ww=new EatDelegate (WW.eat );

EatDelegate eatChain=null;

Console .WriteLine ("座谈会开始");

eatChain = zs+ls+ww;

eatChain ("西瓜");

Console .WriteLine ("李四出去接电话");

eatChain -=ls;

eatChain ("香蕉");

Console .WriteLine ("李四回来了");

eatChain +=ls;

eatChain ("桔子");

}

}

委托可作为方法的参数进行动态调用,看下面代码:

using System ;

delegate void EatDelegate(string food);

class Man

{

private string name;

public Man(string name)

{

this .name =name ;

}

public void eat(string food)

{

Console .WriteLine (name+"吃"+food);

}

}

class Party

{

static void eatTogether(string food,params EatDelegate [] values)

{

if (values ==null )

{

Console .WriteLine ("座谈会结束");

}

else

       {

EatDelegate eatChain=null ;

foreach (EatDelegate ed in values )

eatChain +=ed;

eatChain (food);

Console .WriteLine ();

}

}

static void Main()

{

Man ZS=new Man ("张三");

Man LS=new Man ("李四");

Man WW=new Man ("王五");

EatDelegate zs=new EatDelegate (ZS.eat );

EatDelegate ls=new EatDelegate (LS.eat );

EatDelegate ww=new EatDelegate (WW.eat );

Console .WriteLine ("座谈会开始");

eatTogether("西瓜",zs,ls,ww);

Console .WriteLine ("李四出去接电话");

eatTogether("香蕉",zs,ww);

Console .WriteLine ("李四回来了");

eatTogether("桔子",zs,ls,ww);

Console .WriteLine ("座谈会结束");

eatTogether (null ,null );

}

}

委托[delegate]_C#的更多相关文章

  1. [.NET] C# 知识回顾 - 委托 delegate (续)

    C# 知识回顾 - 委托 delegate (续) [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6046171.html 序 上篇<C# 知识回 ...

  2. [C#] C# 知识回顾 - 委托 delegate

    C# 知识回顾 - 委托 delegate [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6031892.html 目录 What's 委托 委托的属性 ...

  3. C# 委托Delegate(一) 基础介绍&用法

    本文是根据书本&网络 前人总结的. 1. 前言 定义&介绍: 委托Delegate是一个类,定义了方法的类型, 使得可以将方法当做另一个方法的参数来进行传递,这种将方法动态地赋给参数的 ...

  4. 为什么不能把委托(delegate)放在一个接口(interface)当中?

    stackoverflow上有人问,为什么不能把委托放在一个接口当中? 投票最多的第一个答案第一句话说,“A Delegate is just another type, so you don't g ...

  5. C# 代理/委托 Delegate

    本文转载自努力,努力,努力 1. 委托的定义:委托是函数的封装,它代表一"类"函数.他们都符合一定的签名:拥有相同的参数列表,返回值类型.同时,委托也可以看成是对函数的抽象,是函数 ...

  6. c# 委托 delegate

    委托是一种存储函数引用的类型,在事件和事件的处理时有重要的用途 通俗的说,委托是一个可以引用方法的类型,当创建一个委托,也就创建一个引用方法的变量,进而就可以调用那个方法,即委托可以调用它所指的方法. ...

  7. 理解委托(delegate)及为什么要使用委托

    理解委托(delegate)及为什么要使用委托 委托:是一种定义方法签名的类型. 当实例化委托时,您可以将其实例与任何具有兼容签名的方法相关联. 您可以通过委托实例调用方法. 上述为官方说法,理解起来 ...

  8. 深入理解委托(Delegate)

    前言 委托其实一直以来都感觉自己应该挺熟悉的,直到最近又去翻了翻 CLR via C#,感觉我之前的理解可能还有失偏颇.在这记录一下. 之前文章的链接: 接口和委托的泛型可变性 C#高级编程笔记 De ...

  9. C# -- 使用委托 delegate 执行异步操作

    C# -- 使用委托 delegate 执行异步操作 委托是一种安全地封装方法的类型,它与 C 和 C++ 中的函数指针类似. 与 C 中的函数指针不同,委托是面向对象的.类型安全的和保险的. 委托的 ...

随机推荐

  1. 方法字段[C# 基础知识系列]专题二:委托的本质论

    首先声明,我是一个菜鸟.一下文章中出现技术误导情况盖不负责 引言: 上一个专题已和大家分享了我懂得的——C#中为什么须要委托,专题中简略介绍了下委托是什么以及委托简略的应用的,在这个专题中将对委托做进 ...

  2. iis下FastCGI 的常见Error错误

    用iis服务器+FastCGI配置的php环境会经常出现FastCGI Error的错误,像5 (0x80070005).2147467259(0x80004005).1413 (0x80070585 ...

  3. Codeforces Round #326 (Div. 2) C. Duff and Weight Lifting 水题

    C. Duff and Weight Lifting Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest ...

  4. 小学生玩ACM----优先队列

    思来想去,本人还是觉得,这个优先队列啊,不学不行,怎么说咧?虽说有时候我可以模仿它的功能,但是有的题目会坑的我大放血,况且多学会用一个小东东总不会伤身的撒,何况我是永举不垂的,哦耶,嘿嘿 优先队列嘛就 ...

  5. Android 滑动效果基础篇(四)—— Gallery + GridView

    Android系统自带一个GridView和Gallery两个控件,GridView网格显示,Gallery单个浏览,两者结合起来可以真正实现Gallery浏览图片效果. 本示例通过GridView和 ...

  6. iOS开发——UI_swift篇&TableView实现页眉和页脚

    TableView实现页眉和页脚   在UItableView中header和footer是很常见的,而且他能让你实现很复杂的功能,我们见过最多的就是下拉刷新和上啦加载更多,当然你还可以在上面添加一个 ...

  7. Java中介者设计模式

    中介者设计模式是一种很常见的设计模式,当中我们最为熟悉的就是我们的MVC框架.当中的C作为控制器就是一个详细的中介者,它的作用是把业务逻辑(Model),和视图(Viwe)隔离开来.使M V协调工作, ...

  8. oc-01

    //#ifndef __OCDay01__aa__ //#define __OCDay01__aa__ //这2行是预编译指令,防止include的时候重复包含操作(a包含b,b又包含了a) #inc ...

  9. u检验、t检验、F检验、X2检验 (转)

    http://blog.renren.com/share/223170925/14708690013 常用显著性检验 1.t检验 适用于计量资料.正态分布.方差具有齐性的两组间小样本比较.包括配对资料 ...

  10. discuz pc端显示触摸版

    1./source/function/function_core.php function checkmobile() {return true; //此为加上的内容global $_G; ..... ...