如何指定泛型约束:从接口继承的类

本文关键字:接口 继承 何指定 泛型 约束 | 更新日期: 2023-09-27 18:28:06

如何指定类型应该是从Interface继承的类?我尝试了各种变体,但毫无意义。

public class CarDal<TCarMark> where TCarMark:class//also tried ICarMark
{
    ...
    private static readonly DataContext Context = new DataContext(ConnectionString);
    private Table<ICarMark> _tblCarMarks = Context.GetTable<TCarMark>();//Error is "Cannot convert source type 'Table<TCarMark> to target type Table<ICarMark>'"
    ...
}

如何指定泛型约束:从接口继承的类

您的约束,特别是将您引用的两种形式组合在一起,是很好的:

 where TCarMark : class, ICarMark

问题在于差异。

Table<TCarMark>Table<ICarMark> 没有协变/逆变关系

您必须通过此类使用Table<TCarMark>

private Table<TCarMark> _tblCarMarks = Context.GetTable<TCarMark>();
// emphasis: ^^^

然而!不要使用静态数据上下文:

  • 它不会是线程安全的
  • 这意味着数据上下文会随着时间的推移而增长(它是一个工作单元,而不是应用程序生存期对象)