我真的不明白會發生什麼,以及聲明一個類成員作爲接口有什麼用處。 MSDN說接口不能實例化,所以你不能說:將接口聲明爲類成員有什麼用處?
IMovable i = new IMovable();
你不能這樣做的原因是非常簡單的。但是有什麼用的申報,例如:
protected static IMovable i;
我在這種情況下代表什麼?它有什麼用處?
感謝
我真的不明白會發生什麼,以及聲明一個類成員作爲接口有什麼用處。 MSDN說接口不能實例化,所以你不能說:將接口聲明爲類成員有什麼用處?
IMovable i = new IMovable();
你不能這樣做的原因是非常簡單的。但是有什麼用的申報,例如:
protected static IMovable i;
我在這種情況下代表什麼?它有什麼用處?
感謝
要存儲到實現該接口的對象的引用,但你不在乎它是什麼樣的對象,只知道它實現該接口。
即接口構件將由有人被分配到的類實現接口一個實例 - 無論是DI框架或通過自定義代碼。否則,是的,沒有意義。
因爲您將編寫代碼,以便它可以使用執行IMovable
,而不僅僅是那一個。
這使您可以構建loosely coupled的代碼。
接口是一種抽象(契約),不能實例化。但是,如果你在你的類實現你那麼你:
interface IMovable {
void DoStuff();
}
class ImplementinIMovableClass : IMovable {
void DoStuff() { .. }
}
protected static IMovable i = new ImplementinIMovableClass();
可變i
只有在接口中定義的屬性/方法。在這種情況下,它是方法DoStuff();
使用接口方法,你可以想到使用依賴注入減少你的代碼cupling。
會員i
可以代表任何對象的工具IMovable
,這就是爲什麼它是有用的。您可以將不同的對象分配給i
,並根據對象具有特定的行爲。
接口和抽象類非常相似,雖然抽象類可能會更容易在現實世界中來了解。
「車」之類的東西就是一個抽象類;像「2010豐田普銳斯掀背車」將是一個具體的類。有可能擁有或驅動上述任何一種。另一方面,人們不會購買「車輛」,因爲人們會購買特定類型的車輛。在現實生活中,一個人可能假設要求某人給他買一輛車,而沒有指定任何特定種類,但在大多數編程語言中,編譯器在這種情況下會想知道什麼類型。
實際上創建一個對象的代碼必須知道它創建了什麼類型的對象,但是在很多情況下,代碼將被賦予由其他代碼創建的對象。使用抽象類或接口來指定其他代碼期望的代碼將可用於其他代碼,該代碼創建從該抽象類派生或實現該接口的任何類。