泛型约束中的泛型类型
本文关键字:泛型类型 约束 泛型 | 更新日期: 2023-09-27 18:10:10
我希望能够这样指定:
public abstract class ColumnFilter<TCell, TFilterControl> : ColumnFilter
where TFilterControl : FilterControl<>, new()
where TCell : IView, new()
{
}
Class FilterControl<>是一个基类。我不知道FilterControl<>的通用参数是什么。
不能在类型约束中使用未绑定的泛型类型。您必须添加第三个类型参数,像这样:
public abstract class ColumnFilter<TCell, TFilterControl, TFilterControlType> : ColumnFilter
where TFilterControl : FilterControl<TFilterControlType>, new()
where TCell : IView, new()
{
}
或者创建FilterControl
的非泛型基型:
public FilterControl { }
public FilterControl<T> : FilterControl { }
public abstract class ColumnFilter<TCell, TFilterControl> : ColumnFilter
where TFilterControl : FilterControl, new()
where TCell : IView, new()
{
}
如果你想强迫消费者使用你的泛型派生类型,你也可以用internal
构造函数来创建基类型abstract
。
必须告诉ColumnFilter
该类型是什么。
添加第三个泛型类型参数,如下:
public abstract class ColumnFilter<TCell, TFilterControl, TFilter> : ColumnFilter
where TFilterControl : FilterControl<TFilter>, new()
where TCell : IView, new()
{
}
问题是您认为FilterControl<>是一个基类。它不是,把它看作一个模板。在给定<>