這可能是最好的例子。接口中的函數返回任何類實現它的類型的對象
我有兩個結構:狗和貓,它們都屬於IAnimal。
IAnimal有一個函數ConvertFrom(IAnimal),它將任何從IAnimal繼承的對象轉換爲與調用函數相同的類型。
例如爲:
我打電話Dog.ConvertFrom(貓)和我從貓映射在田野中的狗。
我打電話給Cat.ConvertFrom(狗),我得到一隻貓,從狗映射過來的字段。
有什麼辦法可以用接口做到這一點?指定函數必須返回與實現該函數的類相同的類型?
我想簡單地寫它:
IAnimal ConvertFrom(IAnimal)
但我寧願可以指定它要回來的狗或貓,而不是作爲IAnimal(從而減輕進一步投)。
只是讓我知道你要問什麼。你問是否靜態方法,即。 'Dog.ConvertFrom'可以通過接口實現嗎? – 2013-03-02 20:23:44
「狗」和「貓」是否有兼容的字段?如果是這樣,你只會使用'狗'和'貓'嗎?當你說'Dog.ConvertFrom(cat)'是'ConvertFrom'一個靜態方法或實例方法。如果你想優雅地做事情,我會首先建議你停止變異的事情,並採取不變的+功能範例的路線... – 2013-03-02 20:36:04
他們有一些兼容的領域,但不是所有的兼容。我計劃隨着時間的推移將IAnimal擴展到包括其他人,這將需要轉化。目前我使用各種接口來顯示每隻動物所支持的內容(例如,ICoat,速度等),並可以使用它們進行轉換。對於這是一個真實的例子,它是針對Direct3D頂點類型的,它們由着色器指定,但通常對象被存儲爲一種類型的頂點,所以這些轉換需要存在,並且需要是可擴展的。 – 2013-03-02 20:39:52