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