繁体   English   中英

在抽象 class 级别或接口级别约束泛型类型

[英]constraining a generic type at absract class level or interface level

我想将泛型类型限制为特定类型。 在这种情况下,我希望泛型类型 T 属于 IComparable。 我希望限制发生在父 class 级别(或父接口级别)。 这是示例代码:

abstract class BaseContainer<T> where T : IComparable<T> {
    protected List<T> container;
}

class QueueCustom<T> : BaseContainer<T>  {
    public QueueCustom() {
        this.container = new List<T>();
    }
}

这会引发错误:

类型“T”不能用作泛型类型或方法“BaseContainer”中的类型参数“T”。 没有从“T”到“System.IComparable”的装箱转换或类型参数转换。

我可以在子 class 级别限制类型 T 虽然:

abstract class BaseContainer<T> {
    protected List<T> container;
}

class QueueCustom<T> : BaseContainer<T> where T : IComparable<T>   {
    public QueueCustom() {
        this.container = new List<T>();
    }
}

我如何 go 在父 class 而不是在派生的 class 上做它?

你可以在两者中做到这一点。

通过使用class QueueCustom: BaseContainer ,您声明一个声明“为派生 class 选择的类型也将是基类的类型”。

这意味着,为了满足基类的要求,您也必须要求它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM