C# delegate

我们习惯把数据或者对像作为参数传递给方法,比如: int i = int.Parse("99");

int i = int.Parse("99");

如果我们把方法作为参数传递给方法,这就需要用到委託了

namespace delegate_test_01{    class Program    {        //我们习惯把数据或者对像作为参数传递给方法,        //比如:  int i = int.Parse("99");        //如果我们把方法作为参数传递给方法,这就需要用到委託了        public delegate void toSometing(int number);        //C#中委託的参数和返回类型,都要和你要具体委託的方法要一致        public static void PrintNum(int number) //预计要被传递的方法        {            Console.WriteLine($"PrintNumber:{number}");                              }                public static void SquareFunction(int number) // print数字的平方        {            Console.WriteLine($"SquareFunction:{Math.Pow(number, 2)}");        }                        public static void RadicalFunction(int number)// print数字开根号        {            Console.WriteLine($"RadicalFunction:{Math.Sqrt(number)}");        }        static void Main(string[] args)        {            //字面上理解委託,就像是A委託B去办一件事情一样            // WriteSometing 请 PrintNumber 处理事情            toSometing delegateTestA = new toSometing(PrintNum);//传统写法                                    delegateTestA += RadicalFunction;            delegateTestA += PrintNum;            delegateTestA += SquareFunction;            delegateTestA(25);            Console.WriteLine("====以下另一个委任====");            toSometing b = PrintNum;     //语法糖            b(88);            Console.WriteLine("按任意键结束....");            Console.ReadKey();  //可按任意键结束画面        }    }}

结果
PrintNumber:25
RadicalFunction:5
PrintNumber:25
SquareFunction:625
====以下另一个委任====
PrintNumber:88
按任意键结束....


实际应用的情境 教学 引用高手文章
https://eric0806.blogspot.com/2015/01/dotnet-delegate-usage.html


delegate 多播委託
委託的多播(Multicasting of a Delegate)

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;//delegate int NumberChanger(int n);namespace multicasting1{    //delegate int NumberChanger(int n);    class Program    {        delegate int NumberChanger(int n);                static int num = 10;        public static int AddNum(int p)        {            num += p;            return num;        }        public static int MultNum(int q)        {            num *= q;            return num;        }        public static int getNum()        {            return num;        }        static void Main(string[] args)        {            NumberChanger nc; //nc=5            NumberChanger nc1 = new NumberChanger(AddNum);              //宣告的委派 有一个int参数5 这参数会送进 AddNum 方法当参数使用 num = num+5; 10+5            NumberChanger nc2 = new NumberChanger(MultNum);              //宣告的委派 有一个int参数5 这参数会送进 MultNum 方法当参数使用15*5            nc = nc1;            nc += nc2;            nc(5);              //使用同一个参数5 委派串了两个方法 两个方法参数都是5            //num的值随着方法 一直被更改值 一开始是num=10            //进了第一个方法 num=15 进了第二个方法 num=75            Console.WriteLine("Value of Num: {0}", getNum());            Console.ReadKey();        }    }}

关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章