我对C#很陌生,但我有很好的C++知识。从C++开始,我习惯了这样的东西:
class Base1 {};
class Derived1 : Base1 {};
class Base2 {
Base1 foo();
};
class Derived2 {
Derived1 foo();
};
我知道这个词叫做共变。这段代码可能遗漏了一些内容,但我希望你能明白我想说的。当我试图在C#中用重写之类的东西生成类似的东西时,编译器抱怨类型必须相同。像这样:
class Base1 {};
class Derived1 : Base1 {};
class Base2 {
Base1 foo();
};
class Derived2 {
Base1 foo();
};
这会导致什么问题吗?当然,由于我是函数foo的程序员,我可以保证总是会返回Derived1。但调用我函数的人并不知道这一点。
我有一个项目,其中我有一些Manager类,我想使用Interface IManager(这是我自己的类,如果存在任何具有该名称的类,则不是来自.NET的类),因为它们都必须实现方法Load()。Load()总是返回一个Object,该Object由特定的Manager管理。如果每个Manager都实现了IManager,那么所有Manager都将获得接口
ManagableObject Load();
这是好还是坏?或者更好的是,有什么变通办法吗?
我也读到它与模板一起工作,但我想只是这样:
List<Base1> myList;
myList.push_back(new Derived1());
或者我可以在Base1中使用List作为返回类型,在类Derived2中使用List吗?那也没关系。
谢谢并致以最良好的问候,期望
您需要使用new关键字声明您的方法。
class Derived2 {
new Derived1 foo();
};
这就是我的意思:C#支持返回类型协方差吗?但我不知道要寻找术语返回类型协方差