0

我对 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。但是调用我的函数的人并不知道这一点。

我有一个项目,其中有一些管理器类,我想为此使用接口 IManager(这是我自己的类,如果存在任何具有该名称的类,则不是 .NET 中的任何类),因为它们都必须实现一个方法 Load () 例如。Load() 总是返回一个对象,该对象由该特定 Manager 管理。如果每个 Manager 都实现了 IManager,他们都会得到接口

ManagableObject Load();

那是好是坏?或者更好的是,有什么解决方法吗?

我还读到它适用于模板,但我猜只有这样:

List<Base1> myList;
myList.push_back(new Derived1());

或者我可以在 Base1 中使用 List 作为返回类型,在 Derived2 类中使用 List 吗?那也可以。

谢谢和最好的问候,Expecto

4

2 回答 2

0

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

 class Derived2 {
  new Derived1 foo();
};
于 2012-07-23T05:16:41.987 回答
0

这就是我的意思:C# 是否支持返回类型协方差?但我不知道要寻找术语返回类型协方差

于 2012-07-25T16:48:47.550 回答