纠结着委托和事件...

今天看了下委托是啥回事...

教程是蓝色理想的JimmyZiYang的文章,他代码是

Code:
  1. using System;   
  2. using System.Collections.Generic;   
  3. using System.Text;   
  4.   
  5. namespace Delegate {   
  6.        //定义委托,它定义了可以代表的方法的类型   
  7.        public delegate void GreetingDelegate(string name);   
  8.   
  9.        class Program {   
  10.   
  11.               private static void EnglishGreeting(string name) {   
  12.                      Console.WriteLine("Morning, " + name);   
  13.               }   
  14.   
  15.               private static void ChineseGreeting(string name) {   
  16.                      Console.WriteLine("早上好, " + name);   
  17.               }   
  18.   
  19.               //注意此方法,它接受一个GreetingDelegate类型的方法作为参数   
  20.               private static void GreetPeople(string name, GreetingDelegate MakeGreeting) {   
  21.                      MakeGreeting(name);   
  22.               }   
  23.   
  24.               static void Main(string[] args) {   
  25.                      GreetPeople("Jimmy Zhang", EnglishGreeting);   
  26.                      GreetPeople("张子阳", ChineseGreeting);   
  27.                      Console.ReadKey();   
  28.               }   
  29.        }   
  30. }   

第一篇结尾说的也就是:
委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。

果然是避免大量使用if-else(switch)语句...我看教科书的时候就觉得应该也能用if-else来实现...
但是又想到个问题,调用的方法如果参数和委托相同:
 

Code:
  1. public delegate void GreetingDelegate(string name);   
  2.   
  3.     class Program   
  4.     {   
  5.         private static void EnglishGreeting(string name)   
  6.         {   
  7.             Console.WriteLine("Morning, " + name);   
  8.         }   
  9.   
  10.         private static void ChineseGreeting(string name)   
  11.         {   
  12.             Console.WriteLine("早上好, " + name);   
  13.         }   
  14.   
  15.         private static void hit(string name)   
  16.         {   
  17.             Console.WriteLine("打击一次");   
  18.         }   
  19.   
  20.         //注意此方法,它接受一个GreetingDelegate类型的方法作为参数   
  21.         private static void GreetPeople(string name, GreetingDelegate MakeGreeting)   
  22.         {   
  23.             MakeGreeting(name);   
  24.         }   
  25.   
  26.   
  27.         static void Main(string[] args)   
  28.         {   
  29.             GreetPeople("Jimmy Zhang", EnglishGreeting);   
  30.             GreetPeople("张子阳", ChineseGreeting);   
  31.             GreetPeople("tom", hit);   
  32.             Console.ReadKey();   
  33.         }   
  34.   
  35.     }  

结果居然不是Greet也能实现hit方法,
那么看来委托的控制是要靠程序员来决定了,
继续纠结,等待后面能解答疑问

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值