如何指定泛型约束:从接口继承的类
本文关键字:接口 继承 何指定 泛型 约束 | 更新日期: 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: ^^^
然而!不要使用静态数据上下文:
- 它不会是线程安全的
- 这意味着数据上下文会随着时间的推移而增长(它是一个工作单元,而不是应用程序生存期对象)