[英]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.