讀書筆記c 高階程式設計 委託和事件

2021-04-01 18:29:02 字數 1612 閱讀 6278

在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 中使用乙個類時,分兩個階段。首先需要定義這個類,即告訴編譯器這個類由什麼欄位和方法組成。然後 除非只使用靜態方法 例項化類的乙個物件。使用委託時,也需要經過這兩個步驟。首先定義要使用的委託,對於委託,定義它就是告訴編譯器這種型別代表了那種型別的方法,然後建立該委託的乙個或多個例項。定義委託是從...