标签:
using System; namespace Test { public delegate void TryDelegate(string name); public class SayHello{ public void SpeakChinese(string name){ Console.WriteLine("你好,"+name); } public void SpeakEnglish(string name){ Console.WriteLine("Hello,"+name); } public void Speak(string name,TryDelegate ChoseLanguage){ ChoseLanguage(name); } } class Program{ static void Main(string[] args){ SayHello sh=new SayHello(); sh.Speak("小明",sh.SpeakChinese); sh.Speak("Fanun",sh.SpeakEnglish); Console.ReadLine(); } } }
结果:
委托是一种特殊的对象类型,它定义了方法的类型,使得可以将方法当作另一个方法参数来进行传递,其特殊之处在于,我们以前定义的所有对象都包含数据,而委托包含的只是方法的地址。这种方法动态的付给参数的做法,可以避免在程序中大量的使用if...else,switch语句,同时使程序具有更好的扩展性。
委托的多播委托
class Program{ static void Main(string[] args){ SayHello sh=new SayHello(); //sh.Speak("小明",sh.SpeakChinese); //sh.Speak("Fanun",sh.SpeakEnglish); TryDelegate try1=sh.SpeakChinese; TryDelegate try2=sh.SpeakEnglish; sh.Speak("小明",try1); sh.Speak("Fanun",try2); Console.ReadLine(); } }
显示的结果与上面的一致。
还有,委托不同于string的一个特性:它可以将多个方法付给同一个委托,或者将多个方法绑定到同一个委托。
class Program{ static void Main(string[] args){ SayHello sh=new SayHello(); //sh.Speak("小明",sh.SpeakChinese); //sh.Speak("Fanun",sh.SpeakEnglish); TryDelegate try1=sh.SpeakChinese; try1+=sh.SpeakEnglish; sh.Speak("小明",try1); Console.ReadLine(); } }
结果:
你好,小明
Hello,小明
标签:
原文地址:http://www.cnblogs.com/fanun/p/4564815.html