關於C#中的Delegate的一些知識

來源:互聯網
上載者:User

為什麼要使用Delegate?

 

下面是從CSDN摘取來的有助理解的回複

如樓主所說,有些地方可以直接調用對象的方法,而不用委託。
但有些時候這樣做不合適。
比如,在寫這個類的時候,根本就不能確定要調用哪個對象的方法:例如,你把自己的一個對象上的方法掛在微軟的textbox
的一個事件上。微軟在寫textbox時根本就不可能知道這個事件發生時,需要調用哪個對象的哪個方法,只有你自己去指定說需要調什麼方法,並且以委託的
方式掛在相應的事件上。

微軟在寫textbox的事件時,唯一能確定的是這個事件的格式,或者說這個事件需要調用的方法的格式,
類似於  button1_click(object sender, EnentArgs e) 等等。  只要是按照這個類型寫的方法,都能被掛在這個事件上,並且在事件發生時,方法會被調用。

而規定了事件方法格式,就確保了事件發生時被調用的方法都是合法的,不會出現方法類型不符等等。這就是所謂的委託是型別安全的。而c++下面用
void* 的函數指標實現事件處理缺少對函數格式的檢查。 所以C# 發明了委託這個怪東西,為的就是然被調用的函數格式正確。

這隻是基於訊息驅動的實現方式之一。

另一個普遍的方式,是使用介面。這是java的事件處理方式。 它以介面的形式規定了被呼叫者法的格式。這種方式更直接,更簡單,更容易理解。

兩種方式各有利弊,有各自的使用情境,但從效果上看是等效的。

------------------------------------------------------------

7樓給你說的是事件,我直接給你舉個委託的例子。
現在我要對一系列資料進行排序,而排序演算法可能比較複雜,我不會自己寫,我想調用Array.Sort方法,微軟為我們提供了快速排序演算法。
但是這裡有一個問題——我要實現自訂定序,比如對於字串,預設的是按字母順序,但現在我想這樣排序:

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

顯然,微軟不可能提供這樣“個性”的排序方法,那是不是說,就必須讓我們自己去寫快速排序演算法呢?
不需要!
我們只需要使用委託,就能實現這個要求:
string[]strs="I like C# very much".Split();
Array.Sort(strs,Rule);
int void Rule(string first,string second)
{
return first.Length==second.Length?first.CompareTo(second):first.Length.CompareTo(second.Length);
}

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

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

-------------------------------------------------------------------

也不是解決不了,定義一個介面,然後你自己繼承那個介面寫一個類,在介面函數裡把定序寫好.
然後給它傳個類執行個體,排序內部把那個執行個體當介面處理就可以了,java就是這樣解決的.
不過...
很顯然.對於新寫一個類來說我更願意使用委託一條函數解決問題.新寫一個類我要多敲多少次鍵盤呐...
而且在C#3.0裡我連新函數都懶得寫,一個Lambda運算式搞定

 

 

原貼:

http://topic.csdn.net/u/20090102/23/b26f5193-8eb1-4c57-a129-123ddbbe85a4.html

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.