在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
/*
* Created by SharpDevelop. * User: Administrator * Date: 2008/9/2 * Time: 下午 10:23 * 委托(delegate) 委托聲明定義了一种類型,它用一組特定的參數以及返回類型來封裝方法. 對於靜態方法,委托對像封裝要調用的方法. 對於實例方法,委托對像同時封裝一個實例和該實例上的一個方法. 如果您有一個委托對像和一組適當的參數,則可以用這些參數調用該委托. * To change this template use Tools | Options | Coding | Edit Standard Headers. */ using System; delegate void Eatdelegate(string food); //要注意的是委托的返回值類型必須和代理的方法一致 //下面的zsEat() 是一個void無返回值類型,所以委托也必需是一個void類型. //委托的參數也必需和代理的方法一致,參數的個數以及類型都必需一致. 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() { zsEat("西瓜----直接調用");//直接調用 Eatdelegate zs=new Eatdelegate(zsEat);//此處()內的字符必需有代理的方法名稱一致. Eatdelegate ls=new Eatdelegate(lsEat); Eatdelegate ww=new Eatdelegate(wwEat); zs("西瓜----通過委托調用");//通過委托調用 ls("西瓜----通過委托調用"); ww("西瓜----通過委托調用"); } }
/*
* Created by SharpDevelop. * User: Administrator * Date: 2008/9/2 * Time: 下午 10:37 * * To change this template use Tools | Options | Coding | Edit Standard Headers. */ /* * Created by SharpDevelop. * User: Administrator * Date: 2008/9/2 * Time: 下午 10:23 *上個例子中我們調用了三次委托的方法,這樣感覺上挺麻煩的這節課講一下委托鏈 * To change this template use Tools | Options | Coding | Edit Standard Headers. */ using System; delegate void Eatdelegate(string food); //要注意的是委托的返回值類型必須和代理的方法一致 //下面的zsEat() 是一個void無返回值類型,所以委托也必需是一個void類型. //委托的參數也必需和代理的方法一致,參數的個數以及類型都必需一致. 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() { zsEat("西瓜----直接調用");//直接調用 Eatdelegate zs=new Eatdelegate(zsEat);//此處()內的字符必需有代理的方法名稱一致. Eatdelegate ls=new Eatdelegate(lsEat); Eatdelegate ww=new Eatdelegate(wwEat); Eatdelegate eatChain;//聲明委托鏈 eatChain=zs+ls+ww;//將各托相加,執行的順序是接相加的順序. eatChain("西瓜----通過委托調用");//執行結果和前一個例子一樣. } }
/*
* Created by SharpDevelop. * User: Administrator * Date: 2008/9/2 * Time: 下午 10:23 *上個例子中我們調用了三次委托的方法,這樣感覺上挺麻煩的這節課講一下委托鏈 * To change this template use Tools | Options | Coding | Edit Standard Headers. */ using System; delegate void Eatdelegate(string food); //要注意的是委托的返回值類型必須和代理的方法一致 //下面的zsEat() 是一個void無返回值類型,所以委托也必需是一個void類型. //委托的參數也必需和代理的方法一致,參數的個數以及類型都必需一致. 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() { zsEat("西瓜----直接調用");//直接調用 Eatdelegate zs=new Eatdelegate(zsEat);//此處()內的字符必需有代理的方法名稱一致. Eatdelegate ls=new Eatdelegate(lsEat); Eatdelegate ww=new Eatdelegate(wwEat); Eatdelegate eatChain;//聲明委托鏈 Console.WriteLine("張三,李四,王五開座談會."); eatChain=zs+ls+ww;//將各托相加,執行的順序是接相加的順序. eatChain("西瓜----通過委托調用");//執行結果和前一個例子一樣. Console.WriteLine("李四接了個電話"); eatChain-=ls; eatChain("香蕉"); Console.WriteLine("李四回來了"); eatChain+=ls;//此處再把ls加進來後李四就變成最後一個執行的方法了. eatChain("桔子"); } }
/*
* Created by SharpDevelop. * User: Administrator * Date: 2008/9/2 * Time: 下午 10:23 *上個例子中我們調用了三次委托的方法,這樣感覺上挺麻煩的這節課講一下委托鏈 * To change this template use Tools | Options | Coding | Edit Standard Headers. */ using System; delegate void Eatdelegate(string food); //要注意的是委托的返回值類型必須和代理的方法一致 //下面的zsEat() 是一個void無返回值類型,所以委托也必需是一個void類型. //委托的參數也必需和代理的方法一致,參數的個數以及類型都必需一致. class Mydelegate { static void Main() { Eatdelegate eatChain=null;//聲明委托鏈 //下面是匿名方法的介紹 //webcast中,李建忠"C#2.0銳利體驗系列課程"中有一節"匿名方法,迭代器"的講課. eatChain+=delegate(string food){Console.WriteLine("張三吃" + food);}; eatChain+=delegate(string food){Console.WriteLine("李四吃" + food);}; eatChain+=delegate(string food){Console.WriteLine("王五吃" + food);}; eatChain("西瓜----通過委托調用");//執行結果和前一個例子一樣. } }
/*
* Created by SharpDevelop. * User: Administrator * Date: 2008/9/2 * Time: 下午 10:23 *前幾個例子都是對靜態方法的委托,下面的例子是對動態方法的委托 * To change this template use Tools | Options | Coding | Edit Standard Headers. */ using System; delegate void Eatdelegate(string food); class Man { private string name; public Man(string name_) { name=name_; //or 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;//聲明委托鏈 Console.WriteLine("張三,李四,王五開座談會."); eatChain=zs+ls+ww;//將各托相加,執行的順序是接相加的順序. eatChain("西瓜----通過委托調用");//執行結果和前一個例子一樣. Console.WriteLine("李四接了個電話"); eatChain-=ls; eatChain("香蕉"); Console.WriteLine("李四回來了"); eatChain+=ls;//此處再把ls加進來後李四就變成最後一個執行的方法了. eatChain("桔子"); } }
/*
* Created by SharpDevelop. * User: Administrator * Date: 2008/9/2 * Time: 下午 10:23 *下面介紹的是如何把委托做為一個方法傳遞,並進行動態的調用 * webcast 俞暉的"Modern C#系統課程"的"深入委托和事件" * To change this template use Tools | Options | Coding | Edit Standard Headers. */ using System; delegate void Eatdelegate(string food); class Man { private string name; public Man(string name_) { name=name_; //or this.name=name_; } public void Eat(string food) { Console.WriteLine(name + "吃" + food); } } class Party { static void eatTogther(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("張三,李四,王五開座談會."); eatTogther("西瓜",zs,ls,ww); Console.WriteLine("李四接了個電話"); eatTogther("香蕉",zs,ww); Console.WriteLine("李四回來了"); eatTogther("桔子",zs,ls,ww); eatTogther(null,null); } }
using System;
public delegate void GreetingDelegate(string name); class Test { private static void GreetPepole(string name,GreetingDelegate MakeGreeting) { MakeGreeting(name); } private static void EnglishGreeting(string name) { Console.WriteLine("Hello," + name); } private static void ChineseGreeting(string name) { Console.WriteLine("你好," + name); } static void Main() { /* GreetPepole("Athrun",EnglishGreeting); GreetPepole("張學友",ChineseGreeting); //*/ GreetingDelegate d=new GreetingDelegate(EnglishGreeting); d=ChineseGreeting; d+=EnglishGreeting; d+=ChineseGreeting; d("張學友"); } } |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论