没有协方差,遗传怎么可能是合理的?(C#)



我对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#支持返回类型协方差吗?但我不知道要寻找术语返回类型协方差

相关内容

  • 没有找到相关文章

最新更新