|
本文適合對(duì)委托和接口概念非常了解的朋友,并且歡迎各位朋友與Snake一起探討有關(guān)這方面的知識(shí).本文不適合對(duì)委托和接口概念或用途了解一知半解(模糊)的朋友,這篇文章可能會(huì)對(duì)您產(chǎn)生誤導(dǎo),請(qǐng)千萬(wàn)別看.
在文章正式開(kāi)始之前我需要將MSDN上對(duì)委托和接口的內(nèi)容放上來(lái),作為文章之基.
委托:
委托是一種定義方法簽名的類型。當(dāng)實(shí)例化委托時(shí),您可以將其實(shí)例與任何具有兼容簽名的方法相關(guān)聯(lián)。您可以通過(guò)委托實(shí)例調(diào)用方法。
委托用于將方法作為參數(shù)傳遞給其他方法。事件處理程序就是通過(guò)委托調(diào)用的方法。您可以創(chuàng)建一個(gè)自定義方法,當(dāng)發(fā)生特定事件時(shí)某個(gè)類(例如 Windows 控件)就可以調(diào)用您的方法.
委托具有以下特點(diǎn):
委托類似于 C++函數(shù)指針,但它們是類型安全的。
委托允許將方法作為參數(shù)進(jìn)行傳遞。
委托可用于定義回調(diào)方法。
委托可以鏈接在一起;例如,可以對(duì)一個(gè)事件調(diào)用多個(gè)方法。
方法不必與委托簽名完全匹配。有關(guān)更多信息,請(qǐng)參見(jiàn)在委托中使用變體(C#和 Visual Basic)。
C# 2.0 版引入了匿名方法的概念,此類方法允許將代碼塊作為參數(shù)傳遞,以代替單獨(dú)定義的方法。C# 3.0 引入了 Lambda 表達(dá)式,利用它們可以更簡(jiǎn)練地編寫內(nèi)聯(lián)代碼塊。匿名方法和 Lambda 表達(dá)式(在某些上下文中)都可編譯為委托類型。這些功能統(tǒng)稱為匿名函數(shù)。有關(guān) Lambda 表達(dá)式的更多信息,請(qǐng)參見(jiàn)Anonymous Functions (C# Programming Guide)。
接口:
接口描述的是可屬于任何類或結(jié)構(gòu)的一組相關(guān)功能。接口可由方法、屬性、事件、索引器或這四種成員類型的任意組合構(gòu)成。接口不能包含字段。接口成員一定是公共的。
當(dāng)類或結(jié)構(gòu)繼承接口時(shí),意味著該類或結(jié)構(gòu)為該接口定義的所有成員提供實(shí)現(xiàn)。接口本身不提供類或結(jié)構(gòu)能夠以繼承基類功能的方式繼承的任何功能。但是,如果基類實(shí)現(xiàn)接口,派生類將繼承該實(shí)現(xiàn)。
類和結(jié)構(gòu)可以按照類繼承基類或結(jié)構(gòu)的類似方式繼承接口,但有兩個(gè)例外:
類或結(jié)構(gòu)可繼承多個(gè)接口。
類或結(jié)構(gòu)繼承接口時(shí),僅繼承方法名稱和簽名,因?yàn)榻涌诒旧聿话瑢?shí)現(xiàn)。
接口具有下列屬性:
接口類似于抽象基類:繼承接口的任何非抽象類型都必須實(shí)現(xiàn)接口的所有成員。
不能直接實(shí)例化接口。
接口可以包含事件、索引器、方法和屬性。
接口不包含方法的實(shí)現(xiàn)。
類和結(jié)構(gòu)可從多個(gè)接口繼承。
接口自身可從多個(gè)接口繼承。
正文開(kāi)始
在寫這些文字的時(shí)候我又將以上的各個(gè)概念熟悉了一遍,以防自己把自己忽悠混淆了.所以不適合群眾請(qǐng)盡快退散.另外如果您看完上面的定義和特征后就從兩者的混淆中走了出來(lái),您也可以嘗試?yán)^續(xù)往下看.
首先,關(guān)于委托的用法,我們可以這樣使用:
public int Calculate(Func del){ int a = 1, b = 2; return del(a, b); }
NET技術(shù):淺談.Net中容易混淆的委托和接口,轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。