2010-05-11 45 views
2

有人可以解釋C#中接口的確切使用嗎?有人可以解釋C#中接口的確切使用嗎?

+2

它們使接口更容易。 – 2010-05-11 05:10:57

+1

「解釋」有趣的錯字(對我們美國人來說) – 2010-05-11 05:12:29

+1

可能的重複[如何知道何時創建界面?](http://stackoverflow.com/questions/444245/how-will-i-know-when-to-create-an-interface) – 2010-05-11 06:41:58

回答

2

這已經在這裏討論了很多次,在過去,這是很難挑選任何一個重複了這個問題。

爲了節省重複之前所說的話的時間,並開始檢查結果。

0

用最簡單的術語來說,接口表示一個或多個類可以做什麼,儘管在各種類中implimentation可能會有所不同。

+1

必須做,不可以做。 – 2010-05-11 05:22:02

0

Polymorphism 您可以使用2個類來實現相同的接口,而不必確切地知道它是哪個具體類。它有助於保持代碼鬆耦合。

+0

詳細一點會有所幫助! – user337911 2010-05-11 05:24:47

2

想象一下擁有一家生產汽車的工廠的情況。你知道,每部車輛具有發動機和能夠啓動,所以你具備以下條件:

interface IVehicle 
{ 
    Engine vehicleEngine { get; set; } 

    bool StartEngine(); 
} 

現在,工廠生產的其他車輛的陣列,所以例如卡車和普通汽車:

public Car : IVehicle 
{ 
    // MUST implement vehicleEngine and StartEngine: 

    public Engine vehicleEngine { get; set; } 

    public bool StartEngine() 
    { 
     // Cars needs to do xyz to start 
    } 

    public int MaxNumberOfPassenger { get; set; } // Specific to Car 
} 

然後:

public Truck : IVehicle 
{ 
    // MUST implement vehicleEngine and StartEngine: 

    public Engine vehicleEngine { get; set; } 

    public bool StartEngine() 
    { 
     // Trucks needs to do abc to start 
    } 

    public int MaximumLoad { get; set; } // Specific to Truck 
} 

因此,這迫使所有車輛實行特定的成員落入車輛的範疇,但隨後也可以專門用自己獨特的成員。

+0

在這裏,我應該在接口中籤署這些方法,然後在我的課程中實現 ?我可以直接在我的課堂上做,而不是使用界面? – user337911 2010-05-11 05:33:15

+1

所以你可以繞過一輛汽車或一輛卡車,當你通過的時候並不重要。 TestTheVehiclesEngine(IVehice theVehicle){theVehicle.StartEngine(); } - 無論是汽車還是卡車都無所謂,因爲它們都實現了IVehicle,因此都採用StartEngine方法。查找多態性 – 2010-05-11 05:48:17

+0

使用接口的另一個原因是它允許你將設計從你的實現中解耦出來並使你的代碼可測試。如果你的類在構造函數中要求一個接口,而不是具體的實現,你可以換掉你的具體類來模擬。 – 2010-05-11 21:06:59

0

接口定義了可以實例化的類必須實現的最低要求。它通過方法表達了這一點。

例如,接口可以定義一個稱爲富函數,它接受一個整數,並返回一個布爾值:

public interface ICanFoo 
{ 
    bool Foo(int number); 
} 

實現該接口還必須實現此方法的任何類:

public class Fooable : ICanFoo 
{ 
    public bool Foo(int number) 
    { 
     // do something 
    } 
} 

方法中的實現取決於正在實現接口的特定類。

通過使用接口,您不再關心實現是編譯時間,而是規範。你可以這樣調用:

ICanFoo myFooable = ... 
bool success = fooable.Foo(4); 

fooable的實際類型可以是實現ICanFoo因爲你知道這ICanFoo總是定義爲Foo方法的方法實現任何類。