我有3个班级:A,B和C
所有这些类都实现了一个接口IMyInterface
我希望界面定义如下:
internal IMyInterface<E> where E: class
{
E returnData();
}
这样它就可以返回E类型的数据。 类型“E”将是使用Entity Framework v4创建的POCO对象。
在另一个课程中我有:
public class MyClass()
{
IMyInterface<??> businessLogic;
public setBusinessLogic(IMyInterface<E> myObject)
where E : class
{
businessLogic = myObject;
}
}
我尝试用<object>
代替<??>
,但它无法投射我的poco实体类型。
我尝试让我的实体实现一个空接口IEntity
然后使用
IMyInterface<IEntity> businessLogic;
...
businessLogic = new A<POCOObject>();
结果:
Cannot implicitly convert type
'A<POCOObject>' to
'IMyInterface<IEntity>'. An explicit
conversion exists (are you missing a
cast?)
有什么建议吗?
编辑:我尝试将A,B和C类声明为:
internal class A : IBidManager<EntityObjectType>
和
internal class A<E> : IBidManager<E> where E : class
导致同样的错误。
答案 0 :(得分:4)
必须是
public class MyClass<E> where E : IEntity, class
{
IMyInterface<E> businessLogic;
public setBusinessLogic(IMyInterface<E> myObject)
{
businessLogic = myObject;
}
}
或
public class MyClass
{
IMyInterface<POCOObject> businessLogic;
public setBusinessLogic(IMyInterface<POCOObject> myObject)
{
businessLogic = myObject;
}
}
如果您的业务对象要处理任何POCO对象并且每个对象都有一个接口,那么您需要在类级别指定where E : class, IEntity
。否则,您可以使用具体类型作为通用arg