1. 程式人生 > >簡單講解c#委託delegate的用途

簡單講解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();
           }