我正在尝试构建以下结构。编译器似乎不同意将ServiceTicketModel
隐式转换为Model<IEntity>
。为什么会这样,有什么办法可以解决?
public abstract class ModelTest<TModel> where TModel : Model<IEntity>, new()
public abstract class Model<TEntity> where TEntity : IEntity
public class ServiceTicketModel : Model<ServiceTicket>
public class ServiceTicket : Ticket, IEntity
public class ServiceTicketModelTest : ModelTest<ServiceTicketModel>, IDisposable
该错误是上一课,并且消息是:
The type '...ServiceTicketModel' cannot be used as type parameter 'TModel' in the generic type or method 'ModelTest<TModel>'. There is no implicit reference conversion from '...ServiceTicketModel' to '...Model<IEntity>'
答案 0 :(得分:1)
编译器是正确的...您需要子类Model<IEntity>
来满足您在where
上添加的TModel
约束,但是您不能-子类Model<ServiceTicket>
ServiceTicket : IEntity
。不一样。
如果这是一个接口或委托定义,则有时可以使用方差修饰符(in
/ out
)使之满意。但是您不能通过类来做到这一点。
您可能需要使用:
public abstract class ModelTest<TModel, TEntity>
where TModel : Model<TEntity>, new()
where TEntity : IEntity
{...}
public class ServiceTicketModelTest
: ModelTest<ServiceTicketModel, ServiceTicket>
, IDisposable
{...}