2012-05-10 78 views
0

我是asp.net程序員。我已經閱讀了抽象類和接口的文章,我也知道如何實現它。但是任何人都可以實際地解釋我,即通過引用項目場景,在哪裏使用抽象類以及在哪裏使用接口?何處使用Abstact類以及在哪裏使用接口?

我需要一個非常實用或真實世界的項目示例,以便我可以非常有效地在我的項目中實現它?

謝謝先進。

+0

可能的重複[何時使用接口而不是抽象類,反之亦然?](http://stackoverflow.com/questions/479142/when-to-use-an-interface-instead-of-an - 抽象類,反之亦然) –

回答

0

我不能給你一個實際的例子通俗易懂,但讓我解釋一下這兩個事物之間的根本區別小例子:

抽象類是類層次結構的一部分。這意味着它們被用於繼承。接口與繼承無關。抽象類意味着你不能實例化它,並且所有成員(字段,方法構造函數)都由子類繼承。一個接口只能定義方法來實現。

一個vehicle可以是一個抽象類carboat,如果你只是想真實的汽車和船隻被實例化:

,你有一個分層結構,這是有道理的,您應該使用抽象類。車輛可以有一個maximumSpeed字段,然後繼承。一個接口不能定義這個字段。

應該當你只需要這些方法時使用一個接口。假設您正在編寫一個與這些車輛(「驅動它們」)交互的程序,但並不關心這些對象的狀態,您可以使用方法drive()定義接口vehicle,以便程序可以驅動所有船隻和汽車,而不知道它們究竟是什麼。

最後,一個類可以實現多個接口。另一個顯示差異的例子是,如果你可以在現實生活中描繪你的物體,那麼你就會考慮如何與它進行交互。假設一個咖啡機,它有一個開/關按鈕。一臺「抽象咖啡機」實際上並不合理。所有你需要知道的是有一個setOn()setOff()方法。

+1

談論咖啡機:http://www.objectmentor.com/resources/articles/CoffeeMaker.pdf –

+0

不錯的閱讀初學程序員:) – MarioDS

0

我個人喜歡使用接口,當我必須定義對象的特性或能力時,無論對象是什麼。

在一個「真實生活」的例子中,有2個類,Person和Mones(我的暱稱:D)和1個接口,IGuitarPlayer。因此,Mones繼承自Person,如果Mones能夠彈奏吉他,它將實現IGuitarPlayer接口。

0

由於項目中的例子取決於您首先必須瞭解的範例才能理解的範疇,因此我會以烹飪爲例對其進行抽象。

假設我們希望能夠用不同的調味汁烹製意大利麪:我們希望在我們的源代碼中獨立處理意大利麪。第一種方法可能是定義一個接口IPasta與方法庫克:從它的實施

public interface IPasta 
{ 
    void Cook(); 
} 

我們的客戶代碼,然後可以煮麪條獨立:番茄醬,香蒜醬?你的名字,我們可以煮:

... 
IPasta pasta = GetPasta(); 
pasta.Cook(); 
... 

更仔細地思考這個問題,但是,我們發現,烹調麪食總是相同的過程,但不包括在這裏我們要準備醬料點。

這意味着我們有一個基本的意大利麪算法,我們可以獨立於任何調味汁實現:煮沸水,準備醬汁,將意大利麪從鍋中取出並與醬汁合併。

public abstract class Pasta 
{ 
    public void Cook() 
    { 
     BoilWater(); 
     PrepareSauce(); 
     ... 
    } 

    protected abstract void PrepareSauce(); 

    private void BoilWater() 
    { 
     // Boil some water 
    } 
} 

public class PastaWithPestoSauce 
{ 
    protected override void PrepareSauce() 
    { 
     // Prepare pesto sauce 
    } 
} 

,我們的客戶會使用這樣的:

... 
Pasta pasta = GetPasta(); 
pasta.Cook(); 
... 

所以我們還是有一個接口,而不是在C#中的意義,但在衆所周知的公益行爲的一般意義(public方法庫克抽象類),但我們也設法省去了一些代碼。

相關問題