以下代码可在 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运行结束=======");
}
}
}
项目目录: