我對C#很陌生,但我有很好的C++知識。從C++我用這樣的東西是這樣工作的:如何在沒有協變的情況下繼承是合理的? (C#)
class Base1 {};
class Derived1 : Base1 {};
class Base2 {
Base1 foo();
};
class Derived2 {
Derived1 foo();
};
我知道在術語協方差。這段代碼可能會錯過一些東西,但我希望你能得到我想說的。 由於我試圖在C#中用override和stuff來產生類似的東西,Compiler抱怨說類型必須相同。像這樣:
class Base1 {};
class Derived1 : Base1 {};
class Base2 {
Base1 foo();
};
class Derived2 {
Base1 foo();
};
可能導致任何問題? 當然,因爲我是函數foo的程序員,我可以保證總會有一個返回的Derived1。但是任何人打電話給我的功能都不知道。
我有一個項目,我有一些經理類,爲此我想使用接口IManager(它是我自己的類,如果存在任何具有該名稱的.NET中沒有任何.NET類),因爲它們都必須例如實現一個Load()方法。 Load()總是返回一個由該特定管理器管理的對象。 如果每個管理器實現iManager中,所有的人都將獲得接口
ManagableObject Load();
那是好,是壞?或者更好,有沒有解決方法?
我也看了,它與模板的工作,但只有這樣我猜:
List<Base1> myList;
myList.push_back(new Derived1());
或者,我可以在課堂上Derived2的使用List作爲返回類型於Base1和列表?那也可以。
感謝和問候, Expecto
沒有什麼不對您的第一套類定義是(除了需要方法的實現) - 所以我想你可能在你的解釋中錯過了一些東西。你得到什麼編譯器錯誤? – 2012-07-23 05:08:22
C#實際上支持各種地方的協方差;然而_covariant返回values_不被支持,我相信你是在這裏之後。您的樣品目前也顯示出實際問題。 – rjnilsson 2012-07-23 05:55:42
@RJLohan in English它的意思是:「返回值必須是ManagableObject以匹配覆蓋的方法IManager.Load()」 – 2012-07-23 09:28:43