国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - ASP.NET教程 - .NET中接口與類的區(qū)別淺析

.NET中接口與類的區(qū)別淺析

2020-05-13 15:47菜鳥葫蘆娃 ASP.NET教程

在我們?nèi)粘i_發(fā)中經(jīng)常會用到接口與類,這兩者之間究竟有什么區(qū)別呢?又有哪些優(yōu)缺點?下面這篇文章就來給大家介紹了關(guān)于.NET中接口與類區(qū)別的相關(guān)資料,需要的朋友們可以參考借鑒,下面來一起看看吧。

前言

大家應(yīng)該都知道,在.Net中提供了接口,這個不同于Class或者Struct的類型定義。接口有些情況,看似和抽象類一樣,因此有些人認(rèn)為在.Net可以完全用接口來替換抽象類。其實不然,接口和抽象類各有長處和缺陷,因此往往在應(yīng)用當(dāng)中,兩者要結(jié)合來使用,從而互補長短。下面話不多說,來一起看看詳細(xì)的介紹吧。

接下來先說說抽象類和接口的區(qū)別:

區(qū)別一,兩者表達(dá)的概念不一樣。抽象類是一類事物的高度聚合,那么對于繼承抽象類的子類來說,對于抽象類來說,屬于“是”的關(guān)系;而接口是定義行為規(guī)范,因此對于實現(xiàn)接口的子類來說,相對于接口來說,是“行為需要按照接口來完成”。這些聽起來有些虛,舉個例子。例如,狗是對于所有狗類動物的統(tǒng)稱,京哈是狗,牧羊犬是狗,那么狗的一般特性,都會在京哈,牧羊犬中找到,那么狗相對于京哈和牧羊犬來說,就屬于這類事物的抽象類型;而對于“叫”這個動作來說,狗可以叫,鳥也可以叫。很明顯,前者相當(dāng)于所說的是抽象類,而后者指的就是接口。

區(qū)別二,抽象類在定義類型方法的時候,可以給出方法的實現(xiàn)部分,也可以不給出;而對于接口來說,其中所定義的方法都不能給出實現(xiàn)部分。

例如:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
publicabstractclassAbsTest
{
publicvirtualvoidTest()
{
Debug.WriteLine("Test");
}
publicabstractvoidNewTest();
}
publicinterfaceITest
{
voidTest();
voidNewTest();
}

區(qū)別三,繼承類對于兩者所涉及方法的實現(xiàn)是不同的。繼承類對于抽象類所定義的抽象方法,可以不用重寫,也就是說,可以延用抽象類的方法;而對于接口類所定義的方法或者屬性來說,在繼承類中必須要給出相應(yīng)的方法和屬性實現(xiàn)。

區(qū)別四,在抽象類中,新增一個方法的話,繼承類中可以不用作任何處理;而對于接口來說,則需要修改繼承類,提供新定義的方法。

知道了兩者的區(qū)別,再來說說,接口相對于抽象類的優(yōu)勢。

好處一,接口不光可以作用于引用類型,也可以作用于值類型。而抽象類來說,只能作用于引用類型。

好處二,.Net的類型繼承只能是單繼承的,也就是說一個類型只能繼承一個類型,而可以繼承多個接口。其實,我對于這一點也比較贊同,多繼承會使繼承樹變的混亂。

好處三,由于接口只是定義屬性和方法,而與真正實現(xiàn)的類型沒有太大的關(guān)系,因此接口可以被多個類型重用。相對于此,抽象類與繼承類的關(guān)系更緊密些。

好處四,通過接口,可以減少類型暴露的屬性和方法,從而便于保護(hù)類型對象。當(dāng)一個實現(xiàn)接口的類型,可能包含其他方法或者屬性,但是方法返回的時候,可以返回接口對象,這樣調(diào)用端,只能通過接口提供的方法或者屬性,訪問對象的相關(guān)元素,這樣可以有效保護(hù)對象的其他元素。

好處五,減少值類型的拆箱操作。對于Struct定義的值類型數(shù)據(jù),當(dāng)存放集合當(dāng)中,每當(dāng)取出來,都需要進(jìn)行拆箱操作,這時采用Struct+Interface結(jié)合的方法,從而降低拆箱操作。

相對于抽象類來說,接口有這么多好處,但是接口有一個致命的弱點,就是接口所定義的方法和屬性只能相對于繼承它的類型(除非在繼承類中修改接口定義的函數(shù)標(biāo)示),那么對于多層繼承關(guān)系的時候,光用接口就很難實現(xiàn)。因為如果讓每個類型都去繼承接口而進(jìn)行實現(xiàn)的話,首先不說編寫代碼比較繁瑣,有時候執(zhí)行的結(jié)果還是錯誤,尤其當(dāng)子類型對象隱式轉(zhuǎn)換成基類對象進(jìn)行訪問的時候。

那么這時候,需要用接口結(jié)合虛方法來實現(xiàn)。其實在繼承中,到底使用接口還是抽象類。接口是固定的,約定俗成的,因此在繼承類中必須提供接口相應(yīng)的方法和屬性的實現(xiàn)。而對于抽象類來說,抽象類的定義方法的實現(xiàn),貫穿整個繼承樹,因此其中方法的實現(xiàn)或者重寫都是不確定的。因此相對而言,抽象類比接口更靈活一些。

如下給出兩者的簡單對比表格。

 

?

接口

抽象類

多繼承

支持

不支持

類型限制

沒有

有,只能是引用類型

方法實現(xiàn)

繼承類型中必須給出方法實現(xiàn)

繼承類中可以不給出

擴(kuò)展性

比較麻煩

相對比較靈活

多層繼承

比較麻煩,需要借助虛函數(shù)

比較靈活

 

總的來說,接口和抽象類是.Net為了更好的實現(xiàn)類型之間繼承關(guān)系而提供的語言手段,而且兩者有些相輔相成的關(guān)系。因此我并不強調(diào)用什么而不用什么,那么問題的關(guān)鍵在于,如何把這兩種手段合理的應(yīng)用到程序當(dāng)中,這才是至關(guān)重要。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對服務(wù)器之家的支持。

原文鏈接:http://blog.csdn.net/u010533180/article/details/50832456

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 狠狠综合| 色女人的天堂 | 免费黄色小片 | 欧美日韩精品免费观看 | 亚洲区视频在线观看 | 一区二区三区欧美 | 久久福利| 精品国产精品三级精品av网址 | 色婷婷一区| 中文字幕亚洲一区二区三区 | 亚洲免费国产视频 | 成人av一区二区三区 | 在线免费观看日韩视频 | 成人在线小视频 | 四虎免费紧急入口观看 | 中文字幕第七页 | 久久久综合色 | 成人国产精品 | 一区二区三区av | 黄在线 | 国产综合视频在线观看 | 国产亚洲精品久久久久久久久 | 欧美精品成人一区二区三区四区 | 在线成人av| 在线观看成人 | 国产免费一区二区 | 日韩欧美综合 | 国产黄色小视频在线观看 | 国产高潮久久 | 中文日韩av | 黄桃av| 亚洲香蕉在线观看 | 亚洲综合精品 | 亚洲性视屏 | 欧美成人免费电影 | 日韩a∨ | 中文av电影 | 国产黄色电影 | 亚洲视频第一页 | 福利片网站 | 自拍偷拍五月天 |