以下代码可在 github 找到
using System; /**菜鸟上关于委托 * 语法: delegate <return type> <delegate-name> <parameter list> */ public class Day03_1 { /* 实例化委托(Delegate) 一旦声明了委托类型,委托对象必须使用 new 关键字来创建,且与一个特定的方法有关。 控制台: AddNum=>num1=35 Value of num1= 35 MultNum=>num2=50 Value2 of num2= 50 nc=>Day03_1+numberChanger nc1>Day03_1+numberChanger nc2>Day03_1+numberChanger nc+=nc2>Day03_1+numberChanger AddNum=>num1=40 MultNum=>num2=250 GetNum=>num1=40 num2=250 nc(5)=>290 num1:40 num2:250 */ public delegate int numberChanger(int n); static int num1 = 10; static int num2 = 10; public static int AddNum(int p) { num1 += p; Console.WriteLine("AddNum=>num1=" + num1); return num1; } public static int MultNum(int q) { num2 *= q; Console.WriteLine("MultNum=>num2=" + num2); return num2; } public static int GetNum() { int num = num1 + num2; Console.WriteLine("GetNum=>num1={0} num2={1}", num1,num2);//40,250 return num; } public Day03_1() { //创建委托实例 numberChanger nc1 = new numberChanger(AddNum);//注意这里传入的参数就是要调用的方法 numberChanger nc2 = new numberChanger(MultNum); //使用委托对象调用方法 nc1(25); Console.WriteLine("Value of num1= {0}",num1);//35 //Console.WriteLine("Value1 of num {0}", GetNum()); nc2(5); Console.WriteLine("Value2 of num2= {0}",num2);// //Console.WriteLine("Value2 of num {0}", GetNum()); /* * 委托的多播(组播): * 委托对象可使用 "+" 运算符进行合并。 * 一个合并委托调用它所合并的两个委托。 * 只有相同类型的委托可被合并。 * "-" 运算符可用于从合并的委托中移除组件委托。 * 使用委托的这个有用的特点,您可以创建一个委托被调用时要调用的方法的调用列表。 */ numberChanger nc; nc = nc1; Console.WriteLine("nc=>" + nc);//nc=nc1>Day03_1+numberChanger Console.WriteLine("nc1>{0}" ,nc1);//nc=nc1>Day03_1+numberChanger nc += nc2; Console.WriteLine("nc2>{0}", nc2);//nc+=nc2>Day03_1+numberChanger Console.WriteLine("nc+=nc2>{0}", nc);//nc+=nc2>Day03_1+numberChanger // 调用多播 nc(5); Console.WriteLine("nc(5)=>" + GetNum());//290 Console.WriteLine("num1:{0} num2:{1}",num1,num2);//40,250 } }
Mian方法
using System; namespace ConsoleApp1 { class Program { static void Main(string[] args) { if (args is null) { throw new ArgumentNullException(nameof(args)); } Console.WriteLine("======Main开始运行======="); //导入外部类,并运行 //Console.WriteLine("======Day01开始运行======="); //new Day01(); //Console.WriteLine("======Day02开始运行======="); //new Day02(); Console.WriteLine("======Day03_1开始运行======="); new Day03_1(); //Console.WriteLine("======Day03_2开始运行======="); //new Day03_2(); Console.WriteLine("======Main运行结束======="); } } }
项目目录: