一、我对委托的理解 委托是方法的容器,它不生产方法,它只是方法的搬运工。 二、委托的基本使用 class Program { //声明委托 private delegate int Calculator(int numOne,int numTwo); static void Main(string[] args) { //将实例方法装进委托 Calculator dg= new Program().GetSum; //调用委托 var sum = dg(1, 2); //输出结果 Console.WriteLine("计算后的结果为:" sum); } public int GetSum(int num1, int num2) { return num1 num2; } }View Code 从上面的代码可以看到我声明了一个名为“Calculator”的委托,并将“GetSun”方法给了它,最后求出结果为3。 看到这里很多朋友应该是看不明白委托到底是干嘛用的,咋们直接在Mian里面调用GetSum不就好了吗?何必还声明一个看起来毫无意义的委托呢?吃饱了没事做想多敲代码吗? 别急,现在只是将委托的基本语法和用法,待讲完多播委托和匿名函数委托后会将委托的妙用,了解这些的小伙伴可以直接跳过进入妙用。 3.多播委托 class Program { //声明委托 private delegate int Calculator(int numOne,int numTwo); static void Main(string[] args) { //将实例方法装进委托 Calculator dg= new Program().GetSum; dg =new Program().Reduce; //调用委托 var sum = dg(1, 2); //输出结果 Console.WriteLine("计算后的结果为:" sum); Console.ReadKey(); } public int GetSum(int num1, int num2) { Console.WriteLine("加法"); return num1 num2; } public int Reduce(int num1, int num2) { Console.WriteLine("减法"); return num1 - num2; } }View Code 这里我心加了一个“Reduce”方法,并且为了便于观察我在“Reduce”方法和“GetSun”方法中都输出了一段话,至于它为什么返回-1是因为它返回的是“Reduce”的值。 可以看到,多播委托其实就是在原有委托基础上在加一个方法,这也证实了前面我说的委托是方法的容器,当委托里面的方法有多个的时候这个委托就成了多播委托, 当我们调用多播委托的时候它会按照委托里面的方法的添加顺序去执行方法体 4.匿名函数委托 通过上面的例子可以看到无论是普通委托还是多播委托,使用它都非常的麻烦都需要定义方法,并传入其中,这样比较麻烦,想一想,如果你要实现一个有是个方法的多播委托,那是不是得定义十个方法,代码量想想就恐怖。 上面也说过委托是方法的容器,所以这里我们可以通过拉姆达表达式传入匿名方法的方式来缩少一定的代码量。
class Program { //声明委托 private delegate int Calculator(int numOne,int numTwo); static void Main(string[] args) { //将匿名方法装进委托 Calculator dg = (int num1, int num2) => {Console.WriteLine("加法"); return num1 num2; }; //将匿名方法装进委托 dg = (int num1, int num2) => { Console.WriteLine("减法"); return num1 - num2; }; //调用委托 var sum = dg(1, 2); //输出结果 Console.WriteLine("计算后的结果为:" sum); Console.ReadKey(); } }View Code
这段代码实现的效果和上面的多播委托的效果是一样的,效果图我就不发了 三、委托的妙用 看完上面的代码肯定有很多朋友看不明白委托到底是干嘛用的,为什么我要写多余的代码,要知道世间万物皆有它存在的道理,委托也不例外,下面我将写一些容易理解的例子让大家理解下它的妙用! 晚上更新! 来源:https://www./content-4-718801.html |
|