<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        .NET中接口與類的區別淺析

        來源:懂視網 責編:小采 時間:2020-11-27 22:35:22
        文檔

        .NET中接口與類的區別淺析

        .NET中接口與類的區別淺析:前言 大家應該都知道,在.Net中提供了接口,這個不同于Class或者Struct的類型定義。接口有些情況,看似和抽象類一樣,因此有些人認為在.Net可以完全用接口來替換抽象類。其實不然,接口和抽象類各有長處和缺陷,因此往往在應用當中,兩者要結合來使用,從而互
        推薦度:
        導讀.NET中接口與類的區別淺析:前言 大家應該都知道,在.Net中提供了接口,這個不同于Class或者Struct的類型定義。接口有些情況,看似和抽象類一樣,因此有些人認為在.Net可以完全用接口來替換抽象類。其實不然,接口和抽象類各有長處和缺陷,因此往往在應用當中,兩者要結合來使用,從而互

        前言

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

        接下來先說說抽象類和接口的區別:

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

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

        例如:

        publicabstractclassAbsTest
        {
        publicvirtualvoidTest()
        {
        Debug.WriteLine("Test");
        }
        publicabstractvoidNewTest();
        }
        publicinterfaceITest
        {
        voidTest();
        voidNewTest();
        }

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

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

        知道了兩者的區別,再來說說,接口相對于抽象類的優勢。

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

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

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

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

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

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

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

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

        接口

        抽象類

        多繼承

        支持

        不支持

        類型限制

        沒有

        有,只能是引用類型

        方法實現

        繼承類型中必須給出方法實現

        繼承類中可以不給出

        擴展性

        比較麻煩

        相對比較靈活

        多層繼承

        比較麻煩,需要借助虛函數

        比較靈活

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

        總結

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        .NET中接口與類的區別淺析

        .NET中接口與類的區別淺析:前言 大家應該都知道,在.Net中提供了接口,這個不同于Class或者Struct的類型定義。接口有些情況,看似和抽象類一樣,因此有些人認為在.Net可以完全用接口來替換抽象類。其實不然,接口和抽象類各有長處和缺陷,因此往往在應用當中,兩者要結合來使用,從而互
        推薦度:
        標簽: 區別 實現 接口
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲va成无码人在线观看| 亚洲精品电影天堂网| 美女18一级毛片免费看| 国产一卡2卡3卡4卡无卡免费视频| 欧亚精品一区三区免费| 四虎影视免费永久在线观看| 亚洲动漫精品无码av天堂| 国产线视频精品免费观看视频| 青草草色A免费观看在线| 亚洲国产av高清无码| 一级毛片大全免费播放| 色欲A∨无码蜜臀AV免费播| 亚洲电影一区二区| 97国产在线公开免费观看| 亚洲一区无码精品色| 中文字幕av无码不卡免费| 亚洲精品国偷自产在线| 久久国产精品2020免费m3u8 | 亚洲午夜AV无码专区在线播放| 日产久久强奸免费的看| 最新仑乱免费视频| 无码一区二区三区亚洲人妻 | 久久亚洲国产中v天仙www| 日韩精品无码免费一区二区三区| 亚洲精品在线网站| 成年女人免费v片| jizz免费在线观看| 免费国产人做人视频在线观看| 亚洲性色高清完整版在线观看| 成年性生交大片免费看| 成人午夜影视全部免费看| 在线观看视频免费国语| 九九久久精品国产免费看小说| 亚洲国产精品无码久久一线| 国产在线a免费观看| 一级毛片免费毛片毛片| 亚洲美女视频网站| 亚洲精品麻豆av| 国产h视频在线观看免费| 一级A毛片免费观看久久精品 | 亚洲视屏在线观看|