原文:http://blog.csdn.net/susan19890313/article/details/6775461c++
長期以來,c和c++的程序員利用方法指針,將方法做爲參數傳給另外一個方法。c#使用委託來提供相同的功能,它將方法做爲對象封裝起來,容許在運行時間接地綁定一個方法調用。程序員
下面將經過冒泡排序的例子講解委託的產生c#
示例1 :該方法對一個整數數組執行升序排序數組
產生的問題:若是想按照降序排序,有兩個選擇:一是複製上述代碼,而後將大於運算符替換成小於運算符;二是傳遞一個附加的參數,指出如何排序。.net
以下示例2所示:指針
產生的問題:示例2中只考慮了兩種可能的排序方式。若是想按照字母,隨機或其它方式排序,BubbleSort()方法及其對應的SortType值得數量很快就會變得很是「恐怖」。對象
解決方法(委託的產生):爲了減小重複代碼的數量,可將比較方法做爲一個參數傳給BubbleSort()方法。爲了能將方法做爲參數傳遞,委託----一個能表示方法的數據類型--所以產生了。blog
示例3:利用委託將比較方法做爲一個參數傳給方法BubbleSort()排序
可根據須要利用不一樣的排序方法調用方法BubbleSort():BubbleSort(items,GreaterThan),BubbleSort(items,LessThan)注意委託ComparisonHandler是一個應用類型,但沒必要使用new來實例化它。直接傳遞名稱,而不是顯示實例化,這是自C#2.0開始支持的一個新語法,成爲委託推斷。採用這個語法,編譯器將根據方法名(GreaterThan)來查找方法簽名,並驗證它(方法GreaterThan)同方法(BubbleSort)的參數類型匹配get
或BubbleSort(items,new ComparisonHandler(GreaterThan))這是C#1.0中的委託實例化的方法。