【发布时间】:2016-08-02 01:34:05
【问题描述】:
我有以下课程:
class MyObject { }
class MyObject2 { }
interface Parent<T>
{
void DoSomething(T myObj);
}
class Child1 : Parent<MyObject1>
{
public void DoSomething(MyObject1 myObj) { }
}
class Child2 : Parent<MyObject2>
{
public void DoSomething(MyObject2 myObj) { }
}
我想创建一个返回父级的工厂方法,但出现以下转换错误
无法将类型“Child1”隐式转换为“Parent”。存在显式转换(您是否缺少演员表?)
static Parent<object> Factory()
{
return new Child1();
}
有什么解决方法吗?
【问题讨论】:
-
but I get a casting error when I try to cast from Child1 to Parent那么错误是什么..如果您不发布返回的相关错误,我们应该如何知道..? -
Parent<object>!=Parent<MyObject1>。如果您想在非通用上下文中使用Parent<T>,您将不得不create some interfaces。 (即类似于List<T>如何实现非泛型IList) -
如果客户不知道
T是什么,应该如何使用返回的对象? -
您在这里尝试的是协方差。您只能使用接口来做到这一点。并且只有在类型仅用于输出时才应该这样做(而不是用于输入的
T的情况)。但更重要的是,转换为object完全违背了泛型的目的,您应该重新考虑您的设计。