C#学习day03_1-委托,委托多播

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

        }

    }
}

项目目录:
C#学习day03_1-委托,委托多播

上一篇:【图像分割】基于matlab遗传算法优化K聚类图像分割【含Matlab源码 1605期】


下一篇:VSFTP2.3.4(笑脸漏洞)