正式进入c#的世界——委托

真的是学了无数次的委托了,直到现在才深刻的领悟!!

先定义一个委托,实现5个参数相乘:               

		delegate void MeDelegate(int para1, int para2,int para3, int para4,int  para5);
		static void Main(string[] args)
		{
			MeDelegate d;
			d = new MeDelegate(new Program().Ride);
			MyMethod(d); 
			Console.ReadKey(); 
		}
		
		private void Ride(int para1, int para2, int para3, int para4, int para5)
		{
			int sum = para1 * para2 * para3 * para4 * para5;
			Console.WriteLine(sum);
		}

		private static void MyMethod(MeDelegate d)
		{
			d(7, 12, 23, 51, 3);
		}

根据以上例子,可以自己试着改为两个参数相加,来深刻理解一下委托 。 注意:委托要定义为void 类型

为什么要使用委托? 而不直接调用方法呢?

委托使得一个方法可以作为另一个方法的参数进行传递

看一个我在书上看到的例子:

        //接收主函数传过来的参数,进行输出
		public static void Greeting(string  name,string language)
		{
			switch (language)
			{
				case "zhcn":
					ChineseGreeting(name);
					break;
				case "englis":
					EnglisGreeting(name);
					break;
				default:
					EnglisGreeting(name);
					break;
			}
		}
        //英国人打招呼
		private static void EnglisGreeting(string name)
		{
			Console.WriteLine("hello__________" + name);
		}
        //中国人打招呼
		private static void ChineseGreeting(string name)
		{
			Console.WriteLine("ni hao_________" + name);
		}
        
        //主函数
		static void Main(string[] args)
		{
			  Greeting("zhongguoren", "zhcn");
			Console.ReadKey();
		}

现在是两个国家,将来如果有美国、德国、日本等,就需要在程序中进行添加。

根据前两段代码进行修改,做成委托的形式 :

static void Main(string[] args)
		{
			MyDelegate d;
			d = new MyDelegate(new Program().GetContent);
			MyStartUser(d);
			Console.ReadKey();
		}

		private static void MyStartUser(MyDelegate d)
		{
			d("china", "chinese");  //这个d是方法,作为参数传到了这
		}

		private void GetContent(string p1, string p2)
		{
			Console.WriteLine(p1+"________"+p2);
		}

委托提高了方法的扩展性。

同理看下这个是书上的实现-相对复杂:

		public delegate void MyDelegate(string name);
		public static void Main(string[] args)
		{
			Program p = new Program();
			p.Greeting("navy",p.AmericeGreeting);
			p.Greeting("jiaoni", p.ChinaGreeting);
			Console.ReadKey();
		}

		private void ChinaGreeting(string name)
		{
			Console.Write("nihao", name);
		}

		private void AmericeGreeting(string name)
		{
			Console.Write("hello", name);
		}

		public  void Greeting(string name, MyDelegate callback)
		{
			callback(name);
		}

猜你喜欢

转载自blog.csdn.net/us2019/article/details/86299581