泛型约束中的泛型类型

本文关键字:泛型类型 约束 泛型 | 更新日期: 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<>是一个基类。它不是,把它看作一个模板。在给定<>

内的内容之前,它没有实质内容。