我对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类,我想使用一个接口IManager(它是我自己的类,如果存在任何具有该名称的.NET中没有任何类),因为它们都必须实现一个方法Load()例如。 Load()始终返回一个由该特定Manager管理的Object。 如果每个Manager都实现IManager,那么所有管理器都将获得接口
ManagableObject Load();
那好吗,不好吗?或者甚至更好,是否有任何解决方法?
我还读到它适用于模板,但我只想这样:
List<Base1> myList;
myList.push_back(new Derived1());
或者我可以在Base1中使用List作为返回类型,在Derived2类中使用List吗?那也没关系。
谢谢和最诚挚的问候, Expecto
答案 0 :(得分:0)
您需要使用new关键字声明您的方法。
class Derived2 {
new Derived1 foo();
};
答案 1 :(得分:0)
这就是我的意思:Does C# support return type covariance?但我不知道要寻找返回类型协方差这个术语