国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

C#中接口與抽象類的區別

2019-11-17 02:33:45
字體:
來源:轉載
供稿:網友

C#中接口與抽象類的區別

  接口與抽象類是面試中經常會考到的點,容易混淆。首先了解下兩者的概念:

  一、抽象類: 抽象類是特殊的類,只是不能被實例化;除此以外,具有類的其他特性;重要的是抽象類可以包括抽象方法,這是普通類所不能的。抽象方法只能聲明于抽象類中,且不包含任何實現,派生類必須覆蓋它們。另外,抽象類可以派生自一個抽象類,可以覆蓋基類的抽象方法也可以不覆蓋,如果不覆蓋,則其派生類必須覆蓋它們。

  二、接口:

  接口是引用類型的,類似于類,和抽象類的相似之處有三點:

  1、不能實例化;

  2、包含未實現的方法聲明;

  3、派生類必須實現未實現的方法,抽象類是抽象方法,接口則是所有成員(不僅是方法包括其他成員);

  另外,接口有如下特性: 接口除了可以包含方法之外,還可以包含屬性、索引器、事件,而且這些成員都被定義為公有的。除此之外,不能包含任何其他的成員,例如:常量、域、構造函數、析構函數、靜態成員。一個類可以直接繼承多個接口,但只能直接繼承一個類(包括抽象類)。

詳細的,定義上的區別分析,可以參考此篇博客:http://www.survivalescaperooms.com/lovemyth/archive/2008/09/08/828909.html

  這里概括、形象化地解釋一下接口和抽象類的區別:

  接口主要是對行為的抽象;抽象類主要是對類的抽象。

  更加形象的比喻如下:

  1.飛機會飛,鳥會飛,他們都繼承了同一個接口“飛”;但是F22屬于飛機抽象類,鴿子屬于鳥抽象類。  2. 就像鐵門木門都是門(抽象類),你想要個門我給不了(不能實例化),但我可以給你個具體的鐵門或木門(多態);而且只能是門,你不能說它是窗(單繼承);一個門可以有鎖(接口)也可以有門鈴(多實現)。 門(抽象類)定義了你是什么,接口(鎖)規定了你能做什么(一個接口最好只能做一件事,你不能要求鎖也能發出聲音吧(接口污染))。

  代碼級的區別展示:

  一、抽象類:

  抽象類里面可以包括部分具體實現,而接口則不行。

  

public abstract class AClass{    PRivate int x;    private int y;    public int X { get { return x; } }    public int Y { get { return y; } }     public float Sum() { return X + Y; }     public abstract float Average();} public class BClass : AClass{    public override float Average()    {        return Sum() / 2;    }}

  如上面的例子,在抽象類中,實際包括了:幾處具體的實現,二個屬性,一個求和方法。  同時對于接口來說,根本就無法定義字段成員,也就是privateintx,privateinty;它是無法定義的。

  二、接口:

  對于接口實現同樣的功能,你只能做到:

public interface A{    public int X{get;}    public int Y{get;}    public float Sum();}

  你無法提供Sum的任何功能。

  小結:

  1、我們在理解一門技術上,首先可以從其用處上來考慮,要認識到這門技術是做什么用的。這樣才能加深對于知識的理解。后續項目中使用到了接口和抽象類會繼續完善此文檔。

  2、文章僅僅是自己的總結與體會(包括粘貼),希望能為大家提供到幫助。感謝CSDN的phy,和CNBLOG用戶殘葉。

  


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 科技| 仙游县| 五指山市| 时尚| 红河县| 布尔津县| 房产| 临西县| 柏乡县| 容城县| 广宗县| 芷江| 新巴尔虎左旗| 沾化县| 松江区| 河津市| 大英县| 武夷山市| 喀喇沁旗| 萨嘎县| 苏尼特右旗| 华容县| 清徐县| 遂川县| 大关县| 盐城市| 博爱县| 揭西县| 公安县| 利津县| 兰考县| 黎平县| 巴中市| 巫溪县| 宜州市| 濉溪县| 南华县| 休宁县| 永嘉县| 洪江市| 宁波市|