C#虛基類繼承與介面的區別

來源:互聯網
上載者:User
 本文轉自:http://blog.ppku.com/?p=58
類 定義新的資料類型以及這些新的資料類型進行相互操作的方法 定義方式:
class Cat
{
}
class Cat:object
{
}
C#中所有的類都是預設由object類派生來的,顯示指定或者省略效果是一樣的,所以上面的兩個例子是完全相同的。
C#中類包括:抽象類別、密封類、非抽象類別abstract:表示修飾的類不完整,也就是抽象類別,只能用做基類。 在使用是不能直接執行個體化,不能使用new運算子。sealed:表示修飾的類不可派生,也就是密封類。
base:訪問最近的基類,也就是當前類繼承的類
class Cat:Animal
{
public void Cat()
{
base.Eat();
}
}
以上例子中base代表Animal。注意:base只能在類的內部使用。
介面 一個介面定義一個協定。介面可以看成是特殊的抽象類別,但是又有所區別。一個介面可以從多個基底介面繼承,而一個類或結構可以實現多個介面。介面可以包含方法、屬性、事件和索引器。介面本身不提供它所定義的成員的實現,而抽象類別中可以提供定義成員的實現。介面只指定實現該介面的類或結構必須提供的成員。
介面本質上是一種類不過他與類的區分還是很明顯的——不能執行個體化他的精髓在於提供一些類共同的地方,而且能“多繼承”
我們知道所謂對象其實是資料和方法的封裝。介面的作用更多的是工程上的,一般上我們用他來封裝通用的行為,來達到程式的多態。
不必用object的觀點來統一介面,在我的感覺中,繼承簡化對象結構,增加代碼重用,介面抽象行為。
1. 介面本質上是類嗎
這個,要看你認為“類的本質是什麼”了,過多糾纏於這個說法,很容易陷入文字之爭,意義不大。
2. 介面和類有什麼區別和聯絡,主要是聯絡
區別:類的定義需要“實現”,介面的定義只需要“聲明”;類能執行個體化出一個對象,介面不能;類只能單根繼承,介面可以多根繼承;繼承一個類,相當於借用了它已實現的功能,實現一個介面,相當於對外做了一個承諾;……
聯絡:類可以“實現”介面
3. 介面是否具備類的特徵
這要看你認為哪些是“類的特徵”,hehe,比如,“編譯後會產生一個 .class 檔案”算不算特徵……
4. 介面是否是Object
不是。但可以用一個介面型的變數來引用一個對象,而且,被引用的對象,說到底,一定是一個 Object。
1、純虛類與介面不同的是,純虛類可以包含一些實現2、用純虛類包含一些基本的功能或方法3、用介面來定義用戶端與組件之間的通訊方法4、虛基類的實現的變化可能會影響衍生類別5、使用介面要比使用繼承具有更強的適用性
介面的一些特徵;不可以包含任何實現;沒有構造方法;任何成員都隱式聲明為public;
介面是負責功能的定義,項目中通過介面來規範類,操作類以及抽象類別的概念!而類是負責功能的具體實現!
在類中也有抽象類別的定義,抽象類別與介面的區別在於:抽象類別是一個不完全的類,類裡面有抽象的方法,屬性,也可以有具體的方法和屬性,需要進一步的專業化。但介面是一個行為的規範,裡面的所有東西都是抽象的!一個類只可以繼承一個基類也就是父類,但可以實現多個介面
PS:介面除了規範一個行為之外,在具體項目中的實際作用也是十分重要的,在物件導向的設計原則以及設計模式的使用中,無不體現作為一個介面的使用好處,最直接的就是設計原則中OCP(開放封閉原則),我們使用介面,而不需要關心他的具體實現,具體實現的細節變化也無關用戶端(使用介面的類)的使用,對與擴充是開放的,我們可以另寫一個介面的實現來擴充當前程式,而不影響上層的使用,但對修改是封閉的,即我們不能夠再去修改介面的定義,當然這個 “不能夠”是指在規範原則上不應該這麼做!
介面的使用–多態的實現:
public interface IPolimorphism()
{
void Say();
}
建立一個Class1.cs檔案,定義兩個類,擴充IPolimorfism:
using System;
using System.Windows.Forms;
namespace NorthWind
{
public class Red:IPolimorphism //實現介面的方法
{
public void Say() //不需要指定override關鍵字
{
MessageBox.Show("Red!");
}
}
public class Yello:IPolimorphism
{
public void Say() //不需要指定override關鍵字
{
MessageBox.Show("Yello!");
}
}
}
另一個MainFrm.cs檔案,應用程式入口處:
using System;
using System.Windows.Forms;
namespace NorthWind
{
public class MainFrm : System.Windows.Forms
{
[STAThread]
static void Main()
{
IPolimorphism red = new Red();
red.Say();
IPolimorphism yello = new Yello();
yello.Say();
}
}
}
  舉個例子,有一個老漢,做了一個麵餅,給了他的幾個兒子,老大用這個餅,加上點餡,包一下,做成了包子,老二用這個麵餅,在外面刷上油,撒上料,烤一烤,做成了土家燒餅,老三呢,胡亂做,在餅上抹上亂七八糟的東西,烤一烤,做成了披薩餅.基類和衍生類別的關係就是這樣,基類提供了基本的實現,衍生類別就在上面添料,最終就成了每個人心中想要的餅.那介面的故事則不一樣,老漢沒有給眾人面,老漢這回給兒子們畫了一個餅的設計圖,規定了這個餅的厚度,直徑等等,然後把這個規格表發給兒子們了,兒子們拿著畫的餅,各自按自己的想法去做了.兩個故事的區別告訴我們,介面是一種規格,是一個統一的標準,在實際應用中,介面有兩方法的作用.1,通過介面更容易表現設計,更容易溝通,而且介面是沒有實現代碼的,因此,定好介面,再寫實現代碼,就算設計上有變動,也可以通過介面輕易實現修改.而如果不用介面的話,你將直接去寫類,好不容易實現了一個類的代碼,如果設計上有少許的變動,就要去改代碼.2.介面是寫類的實現者看的,這好比建築圖紙是畫給施工工人看的

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.