泛型约束中的泛型类型

时间:2014-06-25 13:51:12

标签: c# generics

我希望能够指定类似的内容:

public abstract class ColumnFilter<TCell, TFilterControl> : ColumnFilter
    where TFilterControl : FilterControl<>, new()
    where TCell : IView, new()
{
}

Class FilterControl&lt;&gt;是一个基类。我不知道FilterControl&lt;&gt;。

的通用参数是什么

3 个答案:

答案 0 :(得分:4)

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

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()
{
}

如果要强制使用者使用通用派生类型,也可以使用abstract构造函数创建基类型internal

答案 1 :(得分:1)

ColumnFilter将被告知该类型将是什么。

添加第三个泛型类型参数,如下所示:

public abstract class ColumnFilter<TCell, TFilterControl, TFilter> : ColumnFilter
    where TFilterControl : FilterControl<TFilter>, new()
    where TCell : IView, new()
{
}

答案 2 :(得分:0)

问题是你认为FilterControl&lt;&gt;是一个基类。事实并非如此,将其视为模板。在给出&lt;&gt;。

中的内容的上下文之前,它没有任何实质内容