委託和事件

2022-04-17 02:37:21 字數 1491 閱讀 7943

委託就是當方法不知道具體的實現並且不知道具體由哪個物件的方法來實現時,委託可以理解為獨特的介面,就是只封裝乙個方法的介面。需要由別人來實現。

兩者在功能上是一樣的!

區別在於:

1.委託只是單一的方法,而介面可以封裝多個方法

2.委託只約束方法的簽名,而介面約束方法的名稱

所以從多型的角度來將,委託可以認為是輕量級的介面。

例子1:

現在我要對一系列資料進行排序,而排序演算法可能比較複雜,我不會自己寫,我想呼叫array.sort方法,微軟為我們提供了快速排序演算法。

但是這裡有乙個問題——我要實現自定義排序規則,比如對於字串,預設的是按字母順序,但現在我想這樣排序:

按字串長度排序,只有當長度不同時,再按字母排序。

顯然,微軟不可能提供這樣「個性」的排序方法,那是不是說,就必須讓我們自己去寫快速排序演算法呢?

不需要!

我們只需要使用委託,就能實現這個要求:

stringstrs="i like c# very much".split();

array.sort(strs,rule);

int void rule(string first,string second)

顯然,我並不需要知道快速排序演算法的邏輯,我只需要告之排序規則,就實現了我的個性排序。

試問:如果沒有委託,你如何解決這個問題?

最簡單的例子2:

array有乙個sort方法,如果要實現自定義排序,有兩個過載:委託和介面

委託:

public

static

void sort(

t array,

comparison

comparison

)

介面:

public

static

void sort(

t array,

icomparer

comparer

)

例子2現在我要對一系列資料進行排序,而排序演算法可能比較複雜,我不會自己寫,我想呼叫array.sort方法,微軟為我們提供了快速排序演算法。

但是這裡有乙個問題——我要實現自定義排序規則,比如對於字串,預設的是按字母順序,但現在我想這樣排序:

按字串長度排序,只有當長度不同時,再按字母排序。

顯然,微軟不可能提供這樣「個性」的排序方法,那是不是說,就必須讓我們自己去寫快速排序演算法呢?

不需要!

我們只需要使用委託,就能實現這個要求:

stringstrs="i like c# very much".split();

array.sort(strs,rule);

int void rule(string first,string second)

顯然,我並不需要知道快速排序演算法的邏輯,我只需要告之排序規則,就實現了我的個性排序。

試問:如果沒有委託,你如何解決這個問題?     

這裡有一篇白話的委託和事件

委託和事件

主要過程如下 1.在後台 中,我們可以定義處理程式方法alartrang 2.然後定義委託,引用到處理程式方法的例項。3.最後將委託新增到事件中。從而,引發事件時就會呼叫相關的事件處理方法。若要使用在另乙個類中定義的事件,必須定義和註冊乙個事件處理程式。事件 處理程式必須具有與為事件宣告的委託相同的...

委託和事件

委託的宣告 public delegate void mydelegate string str 注1.委託的定義和方法的定義類似,只是在前面加了乙個delegate,但委託不是方法,它是一種型別。是一種特殊的型別,看成是一種新的物件型別比較好理解。用於對與該委託有相 同簽名的方法呼叫。2.委託相當...

事件和委託

事件是物件傳送的訊息,以發訊號通知操作的發生。操作可能是由使用者互動 例如滑鼠單擊 引起的,也可能是由某些其他的程式邏輯觸發的。引發事件的物件稱為事件傳送方。捕獲事件並對其作出響應的物件叫做事件接收方。在事件通訊中,事件傳送方類不知道哪個物件或方法將接收到 處理 它引發的事件。所需要的是在源和接收方...