簡單講解c#委託delegate的用途
委託是一個類,它定義了方法的型別,使得可以將方法當作另一個方法的引數來進行傳遞,這種將方法動態地賦給引數的做法,可以避免在程式中大量使用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();
}