2011-10-31 73 views
1

我真的不明白會發生什麼,以及聲明一個類成員作爲接口有什麼用處。 MSDN說接口不能實例化,所以你不能說:將接口聲明爲類成員有什麼用處?

IMovable i = new IMovable(); 

你不能這樣做的原因是非常簡單的。但是有什麼用的申報,例如:

protected static IMovable i; 

我在這種情況下代表什麼?它有什麼用處?

感謝

回答

2

要存儲到實現該接口的對象的引用,但你不在乎它是什麼樣的對象,只知道它實現該接口。

1

接口構件將由有人被分配到的實現接口一個實例 - 無論是DI框架或通過自定義代碼。否則,是的,沒有意義。

3

因爲您將編寫代碼,以便它可以使用執行IMovable,而不僅僅是那一個。

這使您可以構建loosely coupled的代碼。

1

接口是一種抽象(契約),不能實例化。但是,如果你在你的類實現你那麼你:

interface IMovable { 
    void DoStuff(); 
} 

class ImplementinIMovableClass : IMovable { 
    void DoStuff() { .. } 
} 

protected static IMovable i = new ImplementinIMovableClass(); 

可變i只有在接口中定義的屬性/方法。在這種情況下,它是方法DoStuff();

使用接口方法,你可以想到使用依賴注入減少你的代碼cupling。

2

會員i可以代表任何對象的工具IMovable,這就是爲什麼它是有用的。您可以將不同的對象分配給i,並根據對象具有特定的行爲。

1

其他許多答案已經指出,i成員變量可以指向IMovable的任何實現。

這不僅在靈活性方面有很大好處,而且是實現Polymorphism的OO原理的一種方式。

托馬斯

0

接口和抽象類非常相似,雖然抽象類可能會更容易在現實世界中來了解。

「車」之類的東西就是一個抽象類;像「2010豐田普銳斯掀背車」將是一個具體的類。有可能擁有或驅動上述任何一種。另一方面,人們不會購買「車輛」,因爲人們會購買特定類型的車輛。在現實生活中,一個人可能假設要求某人給他買一輛車,而沒有指定任何特定種類,但在大多數編程語言中,編譯器在這種情況下會想知道什麼類型。

實際上創建一個對象的代碼必須知道它創建了什麼類型的對象,但是在很多情況下,代碼將被賦予由其他代碼創建的對象。使用抽象類或接口來指定其他代碼期望的代碼將可用於其他代碼,該代碼創建從該抽象類派生或實現該接口的任何類。

相關問題