在c#中使用乙個類時,分兩個階段。首先需要定義這個類,即告訴編譯器這個類由什麼欄位和方法組成。然後(除非只使用靜態方法)例項化類的乙個物件。使用委託時,也需要經過這兩個步驟。首先定義要使用的委託,對於委託,定義它就是告訴編譯器這種型別代表了那種型別的方法,然後建立該委託的乙個或多個例項。
定義委託是從delegate開始的然而它是如何運作的呢。也許弄個滑鼠事件會容易理解一些,這裡還是拿出書中的例子來。
using system;
namespace wrox.profcsharp.advancedcsharp
;compareop employeecompareop = new compareop(employee.rhsisgreater);
bubblesorter.sort(employees, employeecompareop);
for (int i=0 ; iclass employee // : object
public override string tostring()
", salary);
}public static bool rhsisgreater(object lhs, object rhs)
}class bubblesorter
;compareop employeecompareop = new compareop(employee.rhsisgreater);
bubblesorter.sort(employees, employeecompareop);
for (int i=0 ; iclass employee // : object
public override string tostring()
", salary);
}public static bool rhsisgreater(object lhs, object rhs)
}class bubblesorter
public static bool rhsisgreater(object lhs, object rhs)
也就是說rhsisgreater的引數是匹配compareop存在的,引數中沒有直接使用employee這個type而是採用了一種通用的做法,全都弄成object需要的時候再做轉換,暫時還無法理解其深遠的意義,先記著了。估計是定義委託時不能用這些自定義的type吧。
那麼這段**是什麼時候執行的呢,注意看這段
static public void sort(object sortarray, compareop gtmethod)
{for (int i=0 ; i
其中static public void sort(object sortarray, compareop gtmethod)的引數裡就有這種我們委託好的compareop了。也就是說一旦執行到if (gtmethod(sortarray[j], sortarray[i]))系統就會去找compareop employeecompareop = new compareop(employee.rhsisgreater);然後找public static bool rhsisgreater(object lhs, object rhs)這樣就執行到裡面的**了。
整個事件響應完成。
讀書筆記c 高階程式設計 委託和事件
讀書筆記c 高階程式設計 委託和事件 在c 中使用乙個類時,分兩個階段。首先需要定義這個類,即告訴編譯器這個類由什麼欄位和方法組成。然後 除非只使用靜態方法 例項化類的乙個物件。使用委託時,也需要經過這兩個步驟。首先定義要使用的委託,對於委託,定義它就是告訴編譯器這種型別代表了那種型別的方法,然後建...
讀書筆記c 高階程式設計 委託和事件
在c 中使用乙個類時,分兩個階段。首先需要定義這個類,即告訴編譯器這個類由什麼欄位和方法組成。然後 除非只使用靜態方法 例項化類的乙個物件。使用委託時,也需要經過這兩個步驟。首先定義要使用的委託,對於委託,定義它就是告訴編譯器這種型別代表了那種型別的方法,然後建立該委託的乙個或多個例項。定義委託是從...
讀書筆記c 高階程式設計 委託和事件
在c 中使用乙個類時,分兩個階段。首先需要定義這個類,即告訴編譯器這個類由什麼欄位和方法組成。然後 除非只使用靜態方法 例項化類的乙個物件。使用委託時,也需要經過這兩個步驟。首先定義要使用的委託,對於委託,定義它就是告訴編譯器這種型別代表了那種型別的方法,然後建立該委託的乙個或多個例項。定義委託是從...