由于没有隐式引用转换,无法将类型用作类型参数

我正在尝试构建以下结构。编译器似乎不同意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>'


炎炎设计
浏览 74回答 1
1回答

桃花长相依

编译器是正确的......你需要子类Model<IEntity>化以满足where你添加的约束TModel,但你没有 - 你子类化Model<ServiceTicket>where ServiceTicket : IEntity。这是不一样的。如果这是一个接口或委托定义,您有时可以使用变体修饰符 ( in/ out) 使其满意。但是你不能用类来做到这一点。您可能需要使用:public abstract class ModelTest<TModel, TEntity>&nbsp; &nbsp; where TModel : Model<TEntity>, new()&nbsp; &nbsp; where TEntity : IEntity{...}public class ServiceTicketModelTest&nbsp; &nbsp; : ModelTest<ServiceTicketModel, ServiceTicket>&nbsp; &nbsp; , IDisposable{...}
打开App,查看更多内容
随时随地看视频慕课网APP