泛型约束中的泛型类型

b0b*_*0bi 5 c# generics

我希望能够指定这样的东西:

public abstract class ColumnFilter<TCell, TFilterControl> : ColumnFilter
    where TFilterControl : FilterControl<>, new()
    where TCell : IView, new()
{
}
Run Code Online (Sandbox Code Playgroud)

类 FilterControl<> 是一个基类。我不知道 FilterControl<> 的通用参数是什么。

p.s*_*w.g 5

您不能在类型约束中使用未绑定的泛型类型。您必须添加第三个类型参数,如下所示:

public abstract class ColumnFilter<TCell, TFilterControl, TFilterControlType> : ColumnFilter
    where TFilterControl : FilterControl<TFilterControlType>, new()
    where TCell : IView, new()
{
}
Run Code Online (Sandbox Code Playgroud)

或者创建一个非通用的基本类型FilterControl

public FilterControl { }
public FilterControl<T> : FilterControl { }

public abstract class ColumnFilter<TCell, TFilterControl> : ColumnFilter
    where TFilterControl : FilterControl, new()
    where TCell : IView, new()
{
}
Run Code Online (Sandbox Code Playgroud)

如果您想强制消费者使用您的泛型派生类型,您还可以abstract使用internal构造函数创建基类型。