精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

解析.NET中容易混淆的委托與接口

開發 后端
本文適合對委托和接口概念或用途不了解的朋友.主要介紹了委托與接口的區別,一起來看。

昨天在和一位朋友討論到委托接口的問題,一開始我覺得很不可思議,這兩個東西的概念怎么會混淆呢?要混淆也是接口和抽象類,委托和事件相混淆啊!但是著我的一個例子我馬上意識到很有可能因為我將要表現的這個例子,讓很多朋友混淆了委托與接口的用途.所以我想通過這篇文章試圖說明白委托和接口的概念和用途,其實他們倆的差別還是很大的.

本文適合對委托和接口概念非常了解的朋友,并且歡迎各位朋友與Snake一起探討有關這方面的知識. 本文不適合對委托和接口概念或用途了解一知半解(模糊)的朋友,這篇文章可能會對您產生誤導,請千萬別看. (本文原文是一篇沒有好好排版過的email,我這里將會部分摘抄,部分改進,如果有什么地方您覺得莫名其妙,我將非常感謝您的指正!)

在文章正式開始之前我需要將MSDN上對委托和接口的內容放上來,作為文章之基.

委托:

委托是一種定義方法簽名的類型。當實例化委托時,您可以將其實例與任何具有兼容簽名的方法相關聯。您可以通過委托實例調用方法。

委托用于將方法作為參數傳遞給其他方法。事件處理程序就是通過委托調用的方法。您可以創建一個自定義方法,當發生特定事件時某個類(例如 Windows 控件)就可以調用您的方法.

委托具有以下特點:

委托類似于 C++ 函數指針,但它們是類型安全的。

委托允許將方法作為參數進行傳遞。

委托可用于定義回調方法。

委托可以鏈接在一起;例如,可以對一個事件調用多個方法。

方法不必與委托簽名完全匹配。有關更多信息,請參見在委托中使用變體(C# 和 Visual Basic)。

C# 2.0 版引入了匿名方法的概念,此類方法允許將代碼塊作為參數傳遞,以代替單獨定義的方法。C# 3.0 引入了 Lambda 表達式,利用它們可以更簡練地編寫內聯代碼塊。匿名方法和 Lambda 表達式(在某些上下文中)都可編譯為委托類型。這些功能統稱為匿名函數。有關 Lambda 表達式的更多信息,請參見Anonymous Functions (C# Programming Guide)。

接口:

接口描述的是可屬于任何類或結構的一組相關功能。接口可由方法、屬性、事件、索引器或這四種成員類型的任意組合構成。接口不能包含字段。接口成員一定是公共的。

當類或結構繼承接口時,意味著該類或結構為該接口定義的所有成員提供實現。接口本身不提供類或結構能夠以繼承基類功能的方式繼承的任何功能。但是,如果基類實現接口,派生類將繼承該實現。

類和結構可以按照類繼承基類或結構的類似方式繼承接口,但有兩個例外:

類或結構可繼承多個接口。

類或結構繼承接口時,僅繼承方法名稱和簽名,因為接口本身不包含實現。

接口具有下列屬性:

接口類似于抽象基類:繼承接口的任何非抽象類型都必須實現接口的所有成員。

不能直接實例化接口。

接口可以包含事件、索引器、方法和屬性。

接口不包含方法的實現。

類和結構可從多個接口繼承。

接口自身可從多個接口繼承。

正文開始

在寫這些文字的時候我又將以上的各個概念熟悉了一遍,以防自己把自己忽悠混淆了.所以不適合群眾請盡快退散.另外如果您看完上面的定義和特征后就從兩者的混淆中走了出來,您也可以嘗試繼續往下看.

首先,關于委托的用法,我們可以這樣使用:

以下是代碼片段:

  1. public int Calculate(Func del) { int a = 1, b = 2; return del(a, b); } 

我們可以通過傳不同的Func來改變整個方法的結果.

以下是代碼片段:

  1. public int Add(int a, int b)   
  2. return a + b; }   
  3. public int Sub(int a, int b)   
  4. return a - b; }   
  5. //調用方法如下   
  6. public void TestMethod()   
  7. int result = Calculate(Add);  
  8. //the result is 3 int anotherResult = Calculate(Sub);  
  9. //the result is -1   

首先我在Calculate方法中已經確定了2個數的值,并且包括在該方法當中.在輸出結果的時候能明顯看出傳遞的委托不同,其結果也不同.我們使用委托來改變方法的執行內容,我們不但可以改變其方法的內容,也可以在執行該方法的時候順便做點什么(比如說做個日志記錄).

噢,可能您覺得二者容易混淆的地方在于..我還是舉個例子比較好解釋.

以下是代碼片段:

  1. public interface ICal   
  2. int Calculate(int a, int b); }   
  3. //有多個類實現了ICal接口.   
  4. public class Add : ICal   
  5. public int Calculate(int a, int b)   
  6. return a + b; } } public class Sub : ICal   
  7. public int Calculate(int a, int b)   
  8. return a - b; } }   
  9. //然后通過調用不同類來獲取不同的方法   
  10. public static void Main()   
  11. {   
  12. ICal cal = new Add();   
  13. //ICal=new Sub();   
  14. Console.Write(cal.Calculate(1, 2));   

講解一下,通過上面的例子我們可以知道在創建一個具有計算功能(Calculate)的接口ICal之后,產生了兩個具有計算功能的具體類,分別是Add和Sub.為了要獲得結果,我們創建了一個需要有計算功能的”坑”,并賦予能與此”坑”相匹配的類Add(或Sub),***從該坑中調用Calculate的結果就行.

貌似說的過去?好,那么我至少要讓你覺得有個適用范圍吧!看下面的例子.

比如有個Person類的數組arr.這時候我們可以通過委托的方法實現arr的排序.可是系統怎么知道2個Person哪個排在前面,哪個該排在后面?這時候我們就可以傳進一個委托來告訴系統Peron類的大小.

以下是代碼片段:

  1. arr.Sort(p => { p.ID }); 

該lambda表達式意思是丟給該Sort方法一個排序的Key(此key能夠進行大小比較),那么Sort就可以根據此key來進行比較.那通過接口呢?首先得創建一個繼承自IComparer的類,我就拿本身繼承它吧.

好吧,它本來是很麻煩的:

以下是代碼片段:

  1. private int SortDelegate(Person p)   
  2. return p.ID; }   
  3. public void TestMethod()   
  4. { arr.Sort(new Func(SortDelegate));   

但是我們要承認C# 3.0帶給我們的便利.

現在,我們要讓Person類實現接口的規定.

以下是代碼片段:

  1. public int Compare(Person x, Person y)     
  2. {     
  3. //假設person的ID是int類型     
  4. return x.ID - y.ID;    
  5.  }  

那么我們的實現方法就可能是這樣:

以下是代碼片段:

  1. arr.Sort((new Person() as IComparer) comp); 

不能再繼續舉例子了,我承認我忽悠您了.這些看上去都可以的實現方法有本質的區別!

首先我們看***個委托例子:在Calculate時我們的委托被允許使用了該方法內的兩個變量a,b從而改變了整個方法的結果.在整個過程中委托時很被動的,因為它不知道自己會在什么時候被觸發.上面的例子很簡單,使您沒有這種感覺,而且前面說過在方法執行的時候當委托被觸發我們可以干點別的,比如說做個日志記錄什么的,此時接口有能力又不破壞方法本身運行結構,又能做日志記錄嗎?顯然實現了接口的類只能重寫一遍該方法.

路人甲:那我在接口的實現中再調用一下原方法,***在方法的前面或后面加入日志記錄功能不就完了嗎?

Snake:殺雞焉用宰牛刀?且不說再原方法的可行性,就算可行了,麻煩不說,萬一這個方法執行有多個階段,每個階段都要日志記錄呢?委托能深入方法,并且由方法控制它安放之地,讓委托能起到關鍵作用,此時作為接口大哥的牛刀也剔不干凈雞骨上的肉喲~.

其次說接口的優點.我們前面可以看到委托能深入方法,也就是說委托的關注群體是方法們,而接口關注的群體則是類們.接口讓類必須實現相同簽名的方法或屬性,以便在程序中通過調用可變的方法.既然是因為類的關系,那么它的方法肯定是不可變的了,每個實現了該接口的類,即便功能差不多也要完完全全寫一遍,但是類的地盤大,肚子里的墨水多,雖然在Add類中通過ICal可調用的方法也就一個Calculate(),但是在Calculate始終是Add類的子民,所以該Calculate方法可以調用Add類中所有能調用的資源.而如果是Sub類的話,它的子民Caculate可調用的資源又與Add類不盡相同,畢竟同是Calculate,國籍不同,文化和生活方式也不同嘛,哈哈.

而接口的能力卻是委托所不能企及的地方.它只能被方法藏在伸出,方法外一片藍天而它卻無能為力.如果讓類比作一個國家,方法比作一個人,那么委托不就是深藏在人大腦內的處理方式的思維嗎?不同的人,思維可以變,當鄉下人看到城市中的高樓大廈不禁感嘆,可鄉下人在城市中生活習慣之后,高樓大廈又能怎樣,他早已習以為常.

***的論點有點晦澀,前面的例子具有誤導性,所以本篇文章需要讀懂個人認為不是很容易,畢竟個人對于表達能力還是比較不自信的.希望各位同仁海涵.

【編輯推薦】

  1. 用C#實現HTTP協議下的多線程文件傳輸
  2. 淺談C++調用C#的DLL程序方法
  3. 利用C#實現任務欄通知窗口
  4. C#控件的閃爍問題解決方法總結
  5. 淺析C#延遲加載的運行機制和應用場景

 

責任編輯:于鐵 來源: IT專家網
相關推薦

2010-08-03 08:52:23

委托接口

2009-02-02 10:00:11

ADO.NETASP.NET

2009-08-18 11:08:24

.Net Framew

2009-11-25 11:20:31

并發

2009-03-12 09:05:18

接口C#.NET

2024-05-16 13:36:04

C#委托事件

2024-05-15 09:11:51

委托事件C#

2009-09-08 15:28:24

C#委托

2009-09-02 17:51:36

.NET委托

2009-08-05 17:04:14

.NET委托

2009-10-15 09:12:29

.NET委托

2025-02-20 08:18:12

JWTWeb分布式

2023-03-08 07:34:23

響應式更新細粒度更新

2025-05-21 09:51:11

.NETJWTWeb

2009-06-15 10:57:51

FluentHtmlASP.NET MVC

2010-01-05 18:21:33

.NET Framew

2011-06-16 15:14:17

VB.NET事件委托

2024-12-02 00:53:45

IDisposabl工具接口

2024-05-11 08:10:10

2011-06-30 10:28:50

C#開發
點贊
收藏

51CTO技術棧公眾號

久久艳片www.17c.com| 免费在线观看一级毛片| 在线观看精品一区二区三区| 日韩欧美三级| 国产精品123区| 亚洲美女在线视频| 中文字幕中文字幕99| 亚洲一区二区在线免费| freemovies性欧美| 亚洲一级电影| 在线综合视频播放| 久久亚洲综合网| 91porn在线视频| 欧美大电影免费观看| 国产v综合v亚洲欧| www.xxxx欧美| 中文字幕在线导航| 无码国精品一区二区免费蜜桃 | 91精品视频一区| 熟女丰满老熟女熟妇| 91高清在线观看视频| 男女性色大片免费观看一区二区 | 国产一区二区三区91| 午夜成人在线视频| 岛国视频一区免费观看| 国产精品嫩草影院俄罗斯| 成人1区2区| 国产性天天综合网| 日韩美女在线观看一区| 国产精品无码专区| 17videosex性欧美| 成人动漫一区二区三区| 久久久久久久久久久网站| www.色.com| 亚洲丝袜精品| 丁香婷婷深情五月亚洲| 欧美日韩国产成人| 极品人妻一区二区| 人妖欧美1区| 成人性色生活片| 国产欧美韩国高清| 黄色片子在线观看| 国产欧美一区| 日韩激情av在线免费观看| 国产原创中文在线观看 | 亚洲成人黄色网| 大片在线观看网站免费收看| www.av网站| 亚洲电影在线| 久久国产精品网站| 久久久国产精品久久久| 国产精品久久久久久吹潮| 欧美性xxxxxxxxx| 日日骚一区二区网站| 中文在线最新版天堂| 99久久99久久精品国产片桃花 | 亚洲色图另类专区| 91在线免费看片| 中文字幕亚洲精品在线| 久草成人资源| 欧美乱妇23p| 国产精品久久久久久久乖乖| 免费人成黄页在线观看忧物| 99精品欧美一区二区蜜桃免费 | 狠狠久久综合| 亚洲欧美日韩国产另类专区| av在线不卡一区| 亚洲欧美综合另类| 欧美mv日韩| 精品女同一区二区| 中文字幕第21页| 亚洲天堂一区二区| 欧美日韩日日骚| 僵尸世界大战2 在线播放| 加勒比一区二区三区在线| 精品一区二区三区在线观看| 韩国三级电影久久久久久| 女人十八毛片嫩草av| 7m精品国产导航在线| 日韩欧美中文第一页| 成年网站在线免费观看| 成人免费观看视频大全| 91一区二区在线观看| 久久久久九九九| 99草在线视频| 日韩一区精品字幕| 午夜伦理精品一区| 亚洲欧美综合另类| 蓝色福利精品导航| 欧洲美女免费图片一区| wwwav国产| 操欧美老女人| 日韩二区三区在线| 精品成人av一区二区三区| 日本免费精品| 欧美日韩视频在线观看一区二区三区| 97在线免费视频观看| 超碰在线影院| 最新久久zyz资源站| 任我爽在线视频精品一| 亚洲国产综合网| 九九精品视频在线看| 成人动漫在线视频| 国产黄在线播放| 91麻豆成人久久精品二区三区| 亚洲精品免费在线视频| 在线观看av大片| 视频一区二区三区在线| 91成人福利在线| 精品少妇theporn| 欧美成人综合| 欧美成人全部免费| 亚洲欧美日韩激情| 玖玖国产精品视频| 99精彩视频| seseavlu视频在线| 欧美日韩另类字幕中文| 日本一本中文字幕| 色狠狠一区二区三区| 欧美日本一道本在线视频| 欧美xxxx×黑人性爽| 国产精品久久久久久久| 国产精品久久久久久久久久 | 国产艳俗歌舞表演hd| 欧美a级片视频| 国产精品久久久久免费a∨大胸| av黄色在线播放| 国产成人精品亚洲777人妖| 亚洲韩国在线| 理论片午午伦夜理片在线播放| 国产精品久久久久一区| 国产精品美女在线播放| 性国产高清在线观看| 欧美性大战久久| 中文字幕剧情在线观看| 久久久国产精品入口麻豆| 精品日本一线二线三线不卡| 五月婷婷欧美激情| av成人黄色| 26uuu国产精品视频| 乱老熟女一区二区三区| 婷婷另类小说| 日韩免费在线看| 黄片毛片在线看| 国产精品正在播放| 国产伦精品一区二区三区| 国产成人精品一区二三区四区五区| 日韩中文字幕区一区有砖一区 | 欧美成人性福生活免费看| 一本在线免费视频| 99久久.com| 国产精自产拍久久久久久| 国产三级视频在线看| 福利精品视频在线| 国产真实乱人偷精品| 国产精品www.| 久久久久久久国产精品视频| 中文字幕一区2区3区| 久久久亚洲国产美女国产盗摄| 蜜桃视频日韩| 成年人视频免费在线播放| 精品国产福利视频| 中文字幕在线观看第三页| 欧美一区二区三区红桃小说| 亚洲精品午夜精品| 最近中文字幕免费视频| 久久久精品网| 亚洲一区中文字幕| 男人的天堂在线视频免费观看| 欧美性生活久久| 欧美三级视频网站| 重囗味另类老妇506070| 久久久久久久久久久人体| 国精产品乱码一区一区三区四区| 香蕉成人伊视频在线观看| 国产午夜在线一区二区三区| 日本在线中文字幕一区| 97精品一区二区三区| 无码国产精品高潮久久99| 亚洲国产aⅴ成人精品无吗| 中文字幕国产传媒| 日韩欧美中文| 亚洲一区二区免费在线| 在线h片观看| 8v天堂国产在线一区二区| 麻豆亚洲av熟女国产一区二| 亚洲综合国产| 亚洲aaa激情| 青草青在线视频| 日韩高清av在线| 国产又粗又猛又爽| 亚洲国产精品久久久久秋霞影院| 亚洲国产精品无码久久久久高潮| 老司机免费视频久久| 欧美lavv| 亚洲精品一区二区三区在线| 91国产美女视频| 草草影院在线观看| 日韩午夜在线影院| 日韩精品久久久久久久的张开腿让| 日本欧美大码aⅴ在线播放| 亚洲精品免费网站| 国产乱码午夜在线视频| 欧美一二区视频| 国产 欧美 日韩 在线| 国产精品自拍一区| 91av资源网| 999国产精品| 精品国产乱码久久久久久久软件| 黄色片在线免费看| 精品精品国产高清a毛片牛牛| 国产女同在线观看| 成人免费在线观看入口| 亚洲精品乱码久久久久久久| 精品一区二区三区欧美| 熟女视频一区二区三区| 国产精品第一国产精品| 欧美国产日韩二区| 国产欧美一级片| 色综合天天综合网天天狠天天 | 亚洲美女在线一区| 亚洲码无人客一区二区三区| 欧美视频一区| 国产精品久久久久久影视| 美女扒开腿让男人桶爽久久软| 亚洲风情亚aⅴ在线发布| 成人黄色片在线观看| 久久久久久久久97黄色工厂| 亚洲av毛片在线观看| 久久精品国产99国产| 鲁一鲁一鲁一鲁一澡| 婷婷激情久久| 国产精品色视频| sm捆绑调教国产免费网站在线观看| 日韩最新免费不卡| 蜜芽tv福利在线视频| 精品国产91九色蝌蚪| 可以免费看的av毛片| 一区二区三区四区高清精品免费观看 | 国产精品一区二区免费视频| 91成人免费在线| 91成人破解版| www.亚洲人| 99视频在线免费| 亚洲91视频| αv一区二区三区| 亚州精品国产| 国产精品永久免费观看| 中文字幕色婷婷在线视频| 亚洲精品视频网上网址在线观看 | 美女搡bbb又爽又猛又黄www| 韩日av一区二区| 原创真实夫妻啪啪av| 国产一区二区调教| 久久成年人网站| 影音先锋中文字幕一区二区| 亚洲区成人777777精品| 欧美激情综合色综合啪啪| 四虎免费在线观看视频| 视频在线不卡免费观看| 亚洲图片在线观看| 精品亚洲二区| 不卡一卡2卡3卡4卡精品在| 精品中文在线| av免费精品一区二区三区| 日韩在线亚洲| 国产自产在线视频一区| 国产精品蜜月aⅴ在线| 国产精品久久久久久久久久免费 | 色91精品久久久久久久久| 日本女优在线视频一区二区| 欧美私人情侣网站| 在线观看一区| 我的公把我弄高潮了视频| 国产日韩专区| 成人性做爰片免费视频| 日韩欧美一区二区三区免费看| 警花观音坐莲激情销魂小说| 中文av一区| 国产又粗又猛又爽又黄的网站| 亚洲特色特黄| 一区二区三区韩国| 韩国午夜理伦三级不卡影院| 色综合久久久无码中文字幕波多| 国产成人免费视频精品含羞草妖精| 91亚洲一区二区| 久久综合色8888| 色婷婷狠狠18禁久久| 成人av先锋影音| 久久成人激情视频| 亚洲综合一区在线| 殴美一级黄色片| 亚洲精品美腿丝袜| 好吊操这里只有精品| 黄色一区二区在线观看| 一区二区视频播放| 欧美成人a在线| 你懂的视频在线观看| 日韩小视频网址| 亚洲人体视频| 91亚洲人电影| 小说区图片区色综合区| 亚洲自拍偷拍二区| 久久中文欧美| 99精品视频免费版的特色功能| 91碰在线视频| 精品无码人妻一区二区三| 欧美亚日韩国产aⅴ精品中极品| a天堂视频在线| 亚洲深夜福利在线| 日韩电影在线观看完整版| 日韩视频免费观看高清完整版在线观看 | 久久伊人影院| 噜噜噜噜噜久久久久久91| 99久久99久久精品国产片桃花| 九九爱精品视频| 免费在线观看日韩欧美| av网站免费在线播放| 国产精品成人一区二区艾草| xxxx日本黄色| 亚洲一区二区欧美日韩| 国产男女猛烈无遮挡| 亚洲图片在区色| 日韩三级电影网| 色综合视频一区中文字幕| 亚洲网站三级| 人偷久久久久久久偷女厕| 国内久久视频| 在线免费看污网站| 国产精品不卡在线观看| 日本一区二区三区精品| 欧美不卡一区二区| 亚洲七七久久综合桃花剧情介绍| 国产精品丝袜白浆摸在线| 青青久久av| 成人免费在线网| 国产69精品久久久久777| 日韩一卡二卡在线观看| 日本高清不卡aⅴ免费网站| 国产精品视频免费播放| 欧美精品乱码久久久久久按摩| 9191在线| 国产精品久久久久久久久免费看 | 亚洲欧美综合7777色婷婷| 欧美性生交xxxxxdddd| 国 产 黄 色 大 片| 国内揄拍国内精品| 亚洲国产精品免费视频| 中文字幕中文字幕在线中一区高清 | 久久免费公开视频| 欧美一区二区美女| 日本免费视频在线观看| 国产精品久久综合av爱欲tv| 精品国产一区一区二区三亚瑟 | 国产免费又粗又猛又爽| 久久99久久精品欧美| 成人精品999| 欧美性xxxxxx| 福利小视频在线观看| 国产成人综合精品| 在线免费成人| 日本精品一区| 精品综合免费视频观看| 国产suv精品一区二区68| 91精品麻豆日日躁夜夜躁| 亚洲按摩av| 国产乱码精品一区二区三区中文 | 51vv免费精品视频一区二区| 4444亚洲人成无码网在线观看| 国产一区二区三区黄视频 | 北条麻妃在线观看| 国产欧美日韩在线视频| 中文字幕在线观看1| 日韩中文字幕网站| 亚洲视频资源| 欧美综合在线播放| 国产视频一区二区在线| 最近中文字幕免费在线观看| 久久久精品一区二区| 精品视频在线播放一区二区三区| 成年在线观看视频| 97精品国产露脸对白| 97精品人妻一区二区三区香蕉| 久久综合免费视频| 美女网站色精品尤物极品姐弟| 久久精品国产精品亚洲色婷婷| 日本一区二区三区国色天香| 91精品国自产| 久久免费视频网站| 久久要要av| 丰满岳乱妇一区二区| 色婷婷久久久综合中文字幕| 久草资源在线| 国产成人亚洲综合91精品| 欧美日韩中字| 四虎1515hh.com| 欧美日韩亚洲国产一区| 久久日韩视频| 免费在线一区二区| 国内精品视频一区二区三区八戒|