精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

美女av一区二区| 欧美军同video69gay| 久久久亚洲综合网站| 69亚洲精品久久久蜜桃小说 | 亚洲高清一区二| 不卡影院一区二区| 成年人黄视频在线观看| 不卡的av中国片| 国产成人精品电影久久久| 日韩欧美国产成人精品免费| 美女福利一区| 欧美片在线播放| 日韩在线视频在线观看| 好操啊在线观看免费视频| 国产不卡一区| 欧美久久久一区| 国内性生活视频| 1区2区3区在线视频| 国产性色一区二区| 韩国精品一区二区三区六区色诱| 91久久久久国产一区二区| 国产午夜久久| 欧美激情视频在线观看| 日本精品久久久久中文| 日韩高清一级| 欧美成人性福生活免费看| 三级a在线观看| 蜜桃成人365av| 1024亚洲合集| 污视频在线免费观看一区二区三区 | 91精品久久久久久久久久不卡| 日韩成人中文电影| 国产成人av片| 国产aⅴ精品一区二区四区| 色爱区综合激月婷婷| 黄色成人在线看| 在线免费av导航| 成人免费在线视频| 日韩欧美一区二区视频在线播放 | 精品国产18久久久久久洗澡| 91精品国模一区二区三区| 天堂中文视频在线| 欧美电影网站| 色婷婷综合中文久久一本| av免费观看大全| 成人在线免费观看黄色| 亚洲免费大片在线观看| 中文字幕免费在线不卡| 国产在线观看高清视频| 国产婷婷一区二区| 日本一区二区三区免费观看 | 91视频精品在这里| 国产在线视频欧美一区二区三区| 丁香六月天婷婷| 国产精品小仙女| 91免费视频国产| 一卡二卡在线观看| 六月丁香综合在线视频| 国产一区视频在线播放| 97免费观看视频| 国产美女一区二区三区| 国产主播在线一区| 夜夜爽妓女8888视频免费观看| 午夜一级久久| 国产精品久久久久久久app| 中文字幕在线观看1| 美国毛片一区二区| 国产精品偷伦免费视频观看的| 不卡的免费av| 免费一区视频| 国产精品丝袜久久久久久高清| 97人妻精品一区二区三区软件 | 精品国产一区二区三区麻豆小说| 少妇精品视频一区二区| 久久综合久久综合九色| 日韩欧美一区二区视频在线播放| 欧美18hd| 亚洲成av人片一区二区| 国产免费999| 成人激情久久| 日韩av在线播放资源| 亚洲国产天堂av| 99热在线成人| 久久久亚洲影院| 久久久蜜桃一区二区| 九九国产精品视频| 国产欧美一区二区在线播放| 国产在线黄色| 亚洲综合免费观看高清在线观看| 人妻熟妇乱又伦精品视频| 成人精品国产| 亚洲国产欧美日韩精品| 黄色片在线观看免费| 欧美视频久久| 国产精品电影在线观看| 成人毛片在线精品国产| 国产欧美1区2区3区| 久久成人福利视频| 日本在线一区二区| 日韩成人小视频| 黄色a级片在线观看| 国产欧美一区二区色老头| 国产在线观看一区二区三区 | 国产亚洲a∨片在线观看| 99鲁鲁精品一区二区三区| 一区二区日本视频| 成人综合网网址| 欧美老女人性开放| 国产精品麻豆视频| 777久久久精品一区二区三区 | 日韩欧美在线观看一区二区三区| 国产三级国产精品| 国自产拍偷拍福利精品免费一| 国产精品99久久久久久www| 亚洲AV无码成人片在线观看 | 日韩精品视频在线观看网址| 毛片久久久久久| 老鸭窝亚洲一区二区三区| 高清不卡日本v二区在线| 免费在线看黄| 欧美午夜电影网| 特级西西人体wwwww| 欧美日韩国产亚洲一区| 成人国产精品久久久久久亚洲| 嫩草研究院在线观看| 亚洲一二三四久久| 超碰在线免费av| 日韩精品水蜜桃| 国产99久久精品一区二区永久免费| 亚洲成人一二三区| 亚洲欧美另类综合偷拍| www.com污| 久久国产综合| 国产精品久久一| 欧美少妇另类| 色综合天天狠狠| 国产精品久久久久久亚洲av| 欧美精品激情| 亚洲一区亚洲二区亚洲三区| 五月天婷婷在线视频| 欧美又粗又大又爽| 亚洲毛片亚洲毛片亚洲毛片| 日日夜夜精品免费视频| 日本不卡二区| 成人看片网站| 伊人激情综合网| 久久国产精品免费看| 成人av电影在线观看| 国产av人人夜夜澡人人爽麻豆| 97se亚洲| 久久人人97超碰精品888| 国产77777| 亚洲国产精品久久一线不卡| 亚洲av无码一区东京热久久| 亚洲精品专区| 欧美日韩另类丝袜其他| 吉吉日韩欧美| 在线观看亚洲区| 国产一区二区三区三州| 国产精品国产三级国产a| 女人高潮一级片| 综合久久婷婷| 国产精品日韩欧美一区二区三区| av中文字幕在线观看第一页| 亚洲欧美日韩中文视频| 在线观看亚洲国产| 亚洲精品国产精品乱码不99| 成人免费看片载| 99人久久精品视频最新地址| 人偷久久久久久久偷女厕| 成人午夜毛片| 欧美日韩高清在线观看| 人妻丰满熟妇av无码区hd| 欧美日韩亚洲一区二| a天堂中文字幕| 韩国女主播成人在线| 日韩a级在线观看| 免费av一区| 国产精品视频一区二区高潮| a级毛片免费观看在线| 亚洲国产成人精品久久| 国产美女www| 亚洲黄色在线视频| www.久久av| 激情小说亚洲一区| 免费无遮挡无码永久视频| 日本黄色精品| 国产一区二区三区四区hd| 91久久久久久白丝白浆欲热蜜臀| 色与欲影视天天看综合网| 四虎在线视频| 欧美一区二视频| 婷婷激情五月网| 综合久久给合久久狠狠狠97色| yy1111111| 寂寞少妇一区二区三区| 1024精品视频| 欧美一区久久| 日韩国产欧美精品| 在线精品国产亚洲| 国产精品久久久久高潮| 日本不卡网站| 欧美成人黑人xx视频免费观看| 免费一级毛片在线观看| 精品少妇一区二区三区视频免付费| 波多野结衣视频观看| 亚洲网友自拍偷拍| 亚洲精品自拍视频在线观看| 91亚洲国产成人精品一区二三| 在线免费黄色网| 日韩avvvv在线播放| 欧美男女爱爱视频| 欧美区日韩区| 在线观看成人一级片| 露出调教综合另类| 粉嫩高清一区二区三区精品视频 | 韩日午夜在线资源一区二区| www.成人在线.com| 国产精品av在线| 丁香六月综合| 97精品国产97久久久久久| 成人video亚洲精品| 日韩在线视频观看| av网站在线播放| 亚洲免费一在线| 午夜成人免费影院| 亚洲成色777777女色窝| 国产sm主人调教女m视频| 欧美另类久久久品| 一级片在线免费观看视频| 欧美日韩在线播放一区| 国产91av在线播放| 91国在线观看| 97人妻一区二区精品视频| 粉嫩av一区二区三区免费野| 国产乡下妇女做爰毛片| 亚洲一区二区三区四区中文字幕| tube国产麻豆| 玉足女爽爽91| 久草网视频在线观看| 亚洲最快最全在线视频| 福利所第一导航| 亚洲精品国产一区二区三区四区在线| 熟女少妇a性色生活片毛片| 国产精品二三区| 一级片一级片一级片| 亚洲品质自拍视频网站| 欧美在线视频第一页| 亚洲综合一二区| 日本在线视频中文字幕| 激情久久av一区av二区av三区| 国产午夜视频在线播放| 欧美日韩激情小视频| 国产精品21p| 在线观看日韩一区| 亚洲一级视频在线观看| 欧美人xxxx| 亚洲国产欧美另类| 日韩电影免费观看中文字幕| 香蕉国产在线视频| 亚洲图片欧美午夜| 日本www在线观看视频| 不卡毛片在线看| 白白色在线观看| 日本电影亚洲天堂| 国产原创一区| 国产成人免费观看| 伊人春色之综合网| 杨幂一区欧美专区| 国精品一区二区三区| 国产精品免费入口| 紧缚捆绑精品一区二区| 日本在线不卡一区二区| 久久久99久久精品欧美| 久久噜噜色综合一区二区| 一区二区三区免费在线观看| 国产农村妇女aaaaa视频| 欧美日韩一卡二卡三卡 | 国产精品亚洲视频| 精品黑人一区二区三区观看时间| 国产日韩av一区| 欧美成人aaa片一区国产精品| 欧美色另类天堂2015| 欧美成人精品网站| 日韩精品一区二区三区视频| 国产三级视频在线播放线观看| 久久精品一本久久99精品| 9765激情中文在线| 国产在线日韩在线| 免费观看成人www动漫视频| 亚洲高清资源综合久久精品| 一区视频在线| 亚洲成人天堂网| va亚洲va日韩不卡在线观看| 婷婷丁香综合网| 欧美日韩美女在线| 国产999久久久| 亚洲天堂网在线观看| 97天天综合网| 91牛牛免费视频| av伊人久久| 欧美日韩福利在线| 精品一区二区三区在线播放 | 综合久久综合久久| 久久国产视频一区| 日韩精品中文字幕一区二区三区| 国产在线高清| 欧美一级淫片播放口| 九色精品蝌蚪| 亚洲一区3d动漫同人无遮挡| 久久成人亚洲| 日韩精品人妻中文字幕有码| 最新欧美精品一区二区三区| 国产91国语对白在线| 亚洲成人久久久久| 最新日本在线观看| 成人av资源在线播放| 欧洲三级视频| 精品久久久久av| 99久免费精品视频在线观看| 免费中文字幕在线观看| 3d动漫精品啪啪| 9色在线观看| 国产精品www| 九色成人国产蝌蚪91| 欧美丰满熟妇bbbbbb百度| www.欧美色图| 久久精品欧美一区二区| 日韩视频在线观看一区二区| 黄网站免费在线观看| 91精品久久久久| 久久中文字幕二区| 色综合色综合色综合色综合| 欧美激情综合在线| 精品国产www| 这里只有视频精品| 台湾成人免费视频| 日韩欧美三级一区二区| 天堂精品中文字幕在线| 公侵犯人妻一区二区三区| 色香蕉成人二区免费| 欧美人体大胆444www| 国产极品jizzhd欧美| 欧美日韩国产高清电影| 日韩一级理论片| 国产精品天美传媒| 国产精品亚洲lv粉色| 超碰精品一区二区三区乱码| 二区三区精品| 国产精品视频一二三四区| 粉嫩高潮美女一区二区三区 | 亚洲福利久久| 久久久国产精品无码| 一本高清dvd不卡在线观看| 国产三级电影在线| 国产深夜精品福利| 欧美日韩综合| 成年人的黄色片| 色婷婷久久久亚洲一区二区三区| 丁香在线视频| 91日韩在线视频| 韩日在线一区| 91精彩刺激对白露脸偷拍| 在线观看成人小视频| 麻豆系列在线观看| 国产精品12| 免费精品视频| 在线观看黄网址| 亚洲成人激情在线观看| 深夜成人影院| 性做爰过程免费播放| 成人av网址在线| 蜜臀99久久精品久久久久小说| 日韩一区二区精品视频| 99re8这里有精品热视频免费| 欧美日韩亚洲一| 1区2区3区精品视频| 神马久久久久久久久久| 国产精品美女网站| 国产精品二区影院| 精品欧美一区二区久久久| 欧美精品18+| 午夜激情电影在线播放| av不卡在线免费观看| aaa欧美日韩| 97精品人妻一区二区三区在线 | 国产精品高清无码| 九九综合九九综合| 久久av超碰| 岛国大片在线免费观看| 色婷婷激情综合| 日韩少妇视频| 日本中文不卡| 成人听书哪个软件好| 中文字幕在线一| 97超视频免费观看| 欧美在线三区| 女人黄色一级片| 日韩av有码在线| 一区二区免费|