C 委託的使用

2021-05-31 23:23:20 字數 1152 閱讀 3847

為了理解委託,首先設計乙個簡單的業務場景

寫乙個簡單的氣泡排序的演算法

public intbubblesort(int items)}}

return items;

}因為這個演算法是乙個經典演算法,於是決定把他封裝到乙個通用的類庫里,但是……,麻煩來了,如果傳進去的變數是比對字串怎麼辦?好,按照以前的思路,再加乙個過載public static voidbubblesort(string items),那如果我們遇到這樣乙個業務,拿到一些字串,如 12564a,42344f,1234d,排序的規則是先比對最後乙個字母,然後比對前面的4位數字,怎麼辦?也許以後還會遇到其它稀奇古怪的排序方式。我們這時發現,氣泡排序的演算法是固定的,但是排序的比較方式是未知的。

好,當我們需要封裝乙個功能,但這個功能中其中有些內容是未知的,需要使用者自定義時,這時委託可以上場了,這就是它的應用場景。

用這種方式,當有新的需求時,使用者自己修改自定義的**,而不必修改封裝好的類,使得跨類邊界呼叫耦合低。符合低耦合,高內聚,開放封閉原則。

既然委託能解決問題,那,我們看一下什麼是委託。委託的本質就是乙個指向方法的指標,可以讓乙個函式以引數的形式呼叫其它函式。

當然這個說法比較難以理解,我們一步一步來看,先看一看在c#裡,委託這個「指標」是如何定義的,然後看一下什麼叫「把乙個以引數的形式」,最後看一看兩個class之間的方法,如何通過委託發生關係。

1.       委託定義:public delegatebool comparehandler(object obj1, objectobj2);相當於宣告乙個指標。

2.      以引數的形式:public objectbubblesort(object items, comparehandler comparehalder)

3.      呼叫:

commonmethod method = newcommonmethod();

method.bubblesort(new object , compare);

private bool compare(object obj1, objectobj2)

else

}對於委託還有一種簡化的寫法,  

delegate bool comparehandler = delegate(object obj1, objectobj2)

else

C 使用委託

文章整理自msdn 委託是一種引用方法的型別。一旦為委託分配了方法,委託將與該方法具有完全相同的行為。委託方法的呼叫可以像其他任何方法一樣,具有引數和返回值,如下面的示例所示 與委託的簽名 由返回型別和引數組成 匹配的任何可訪問類或結構中的任何方法都可以分配給該委託。方法可以是靜態方法,也可以是例項...

C 委託使用

委託是乙個類,它定義了方法的型別,說白了就是將乙個方法當作另乙個方法的引數來進行傳遞,這種將方法動態地賦給引數的做法。可以避免在程式中大量使用 if else switch 語句,同時使得程式具有更好的可擴充套件性。它封裝了委託型別的變數,使得 在類的內部,不管你宣告它是public還是protec...

C 委託使用

c 委託使用案例 假定有兩個物件a和b,在a中例項化了物件b,那麼a可以訪問b中的方法,反過來b不能直接訪問a中的方法,所以使用委託。委託的使用步驟 條件 在a物件中例項化了b 1 在b中宣告乙個委託原型 2 在a中根據委託原型編寫所需要的委託方法 3 在b中利用宣告的委託原型宣告乙個委託變數 4 ...