我们习惯把数据或者对像作为参数传递给方法,比如: 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(); } }}