今天看了下委托是啥回事...
教程是蓝色理想的JimmyZiYang的文章,他代码是
- using System;
- using System.Collections.Generic;
- using System.Text;
- namespace Delegate {
- //定义委托,它定义了可以代表的方法的类型
- public delegate void GreetingDelegate(string name);
- class Program {
- private static void EnglishGreeting(string name) {
- Console.WriteLine("Morning, " + name);
- }
- private static void ChineseGreeting(string name) {
- Console.WriteLine("早上好, " + name);
- }
- //注意此方法,它接受一个GreetingDelegate类型的方法作为参数
- private static void GreetPeople(string name, GreetingDelegate MakeGreeting) {
- MakeGreeting(name);
- }
- static void Main(string[] args) {
- GreetPeople("Jimmy Zhang", EnglishGreeting);
- GreetPeople("张子阳", ChineseGreeting);
- Console.ReadKey();
- }
- }
- }
第一篇结尾说的也就是:
委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。
果然是避免大量使用if-else(switch)语句...我看教科书的时候就觉得应该也能用if-else来实现...
但是又想到个问题,调用的方法如果参数和委托相同:
- public delegate void GreetingDelegate(string name);
- class Program
- {
- private static void EnglishGreeting(string name)
- {
- Console.WriteLine("Morning, " + name);
- }
- private static void ChineseGreeting(string name)
- {
- Console.WriteLine("早上好, " + name);
- }
- private static void hit(string name)
- {
- Console.WriteLine("打击一次");
- }
- //注意此方法,它接受一个GreetingDelegate类型的方法作为参数
- private static void GreetPeople(string name, GreetingDelegate MakeGreeting)
- {
- MakeGreeting(name);
- }
- static void Main(string[] args)
- {
- GreetPeople("Jimmy Zhang", EnglishGreeting);
- GreetPeople("张子阳", ChineseGreeting);
- GreetPeople("tom", hit);
- Console.ReadKey();
- }
- }
结果居然不是Greet也能实现hit方法,
那么看来委托的控制是要靠程序员来决定了,
继续纠结,等待后面能解答疑问