委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。
public void GreetPeople(string name) {
EnglishGreeting(name);
}
public void EnglishGreeting(string name) {
Console.WriteLine("Morning, " + name);
}
当有中国人时:
public void ChineseGreeting(string name){
Console.WriteLine("早上好, " + name);
}
这时需要修改GreetPeople,添加一个枚举,也可用if else
public enum Language{
English, Chinese
}
public void GreetPeople(string name, Language lang){
//做某些额外的事情,比如初始化之类,此处略
swith(lang){
case Language.English:
EnglishGreeting(name);
break;
case Language.Chinese:
ChineseGreeting(name);
break;
}
}
但如果有更多国家人时,需要再次修改GreetPeople,这样就不能很好的扩展,如果能吧 EnglishGreeting等作为参数传递,就好了
于是就有了委托delegate
public delegate void GreetingDelegate(string name);
public void GreetPeople(string name, GreetingDelegate MakeGreeting) {
MakeGreeting(name);
}
//这样在使用时,把方法作为参数传递
static void Main(string[] args) {
GreetPeople("Jimmy Zhang", EnglishGreeting);
GreetPeople("张子阳", ChineseGreeting);
Console.ReadKey();
}