没有协方差,遗传如何才能合理? (C#)

时间:2012-07-23 05:00:16

标签: c# inheritance covariance

我对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

2 个答案:

答案 0 :(得分:0)

您需要使用new关键字声明您的方法。

 class Derived2 {
  new Derived1 foo();
};

答案 1 :(得分:0)

这就是我的意思:Does C# support return type covariance?但我不知道要寻找返回类型协方差这个术语