一聽到委託,當然就感覺到這件事情是給某東西去做。
比如,你委託啊新哥去買包煙 ,委託是不是好像只是一種聲明一樣,真正的動作是去買煙().也就是教材書上說的方法的簽名
那先看看委託的聲明: public delegate string (string name); //public 修飾符 delegate聲明委託的關鍵字 void 是傳回型別 name當然是參數
還要說明的是 委託是一種類型。好了其它的不多說,先來用用委託這東西
委託儲存的是方法的地址
買煙 my 所以my我們也就可能是一個方法
既然這個東西這麼好,用誰就是指向誰就好,是不是少了很多if swtihc的判斷(因為你要誰就指向誰了,當然就有這種感覺呢!)
下面一步一步來體現這種感覺
我們知道打招乎中國人當然是中文,英國人當然是英文
英國人打招乎:
////英文 public void EnglishGreeting(string name) { Console.WriteLine("Morning"+name); }
中國人打招乎:
////中文 public void ChineseGreeting(string name) { Console.WriteLine("早上好, " + name); }
////如果要加另外一些國家的方法呢?? public enum Language { English,Chinese } ////問候人們的方法 ,當然越來越多呢????? public void GreePeople(string name, Language lange) { switch(lange) { case Language.English: EnglishGreeting(name); break; case Language.Chinese: ChineseGreeting(name); break; } }
上面我們有用枚舉和switch分支來判斷是那個人打招乎了,並調用某一方法。實現不同國家的人調不同的方法,那問題又來了,哥們如果在加些一法國,德國。。。一些國家
那麼這個swtich分支結構就不好寫了是不,越來越多了!上面不是說了嘛,用誰就調用誰嘛!把委託當作當參數,用誰就指向誰的方法
private static void EnglishGreeting(string name) { Console.WriteLine("Morning," + name); } private static void ChineseGreeting(string name) { Console.WriteLine("早上好," + name); } //用委託類型作為參數來傳遞 private static void GreePeople(string name, GreetingDelegate MakeGreeting) { MakeGreeting(name); }
引用網上看到的一句話:委託是一個類,它定義了方法的類型,
使得可以將方法當作另一個方法的參數來進行傳遞,這種將方法動態地賦給參數的做法,
可以避免在程式中大量使用If-Else(Switch)語句,同時使得程式具有更好的可擴充性。
好了委託就說說這裡,也是簡單的說了下,希望對朋友們有協助