我有一个基类,比如 A。
我从那个基类派生了一堆其他类,比如 A1、A2、A3 ...
我有第三个类,比如 B。它拥有的方法之一需要能够返回任何派生自 A 的类。
我尝试了以下方法:
public T getObject<T>() where T : A
{
return (new A1());
}
然而,这会返回一个错误,指出无法将类型 A1 转换为 T。
这个通用的返回可以实现吗?
最佳答案
如果您知道您的类将从 A 继承,但不需要知道确切的类型,那么您不需要泛型:
public A getObject()
{
return new A1();
}
如果您的示例已编译,则意味着您可以调用
A2 result = getObject<A2>();
但是您对 getObject
的实现总是返回一个 new A1()
。因为 A1
没有继承 A2
,所以这是错误的。
听起来您可能希望根据某些神秘逻辑的结果返回不同的类型。这很好,仍然不需要泛型:
public A getObject()
{
switch(MysteryLogic())
{
case MysteryLogicResult.One:
return new A1();
case MysteryLogicResult.Two:
return new A2();
case MysteryLogicResult.Three:
return new A3();
}
}
关于c# - 我如何编写一个函数来返回从 C# 中的基类派生的任何对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25100526/