泛型类型约束与继承语法冲突,如何正确编写兼具二者的类?
正确实现泛型类继承与类型约束的写法
嘿,你遇到的问题其实是泛型类声明的语法顺序搞错啦!C#对泛型类的继承、约束书写顺序有明确要求,下面给你一步步讲正确的写法:
1. 带类型约束的泛型MyClass<T>继承MyClassBase
正确的语法逻辑是:先声明泛型类的继承关系,再写where类型约束。你之前把where放在继承语句前面,这就违反了C#的语法规则啦。
正确代码示例:
// 先写继承自MyClassBase,再定义T的约束 class MyClass<T> : MyClassBase where T : IEnumerable { // 你的类成员逻辑 }
记住这个固定顺序:类名<T> : 基类 where T : 约束条件,就不会再踩语法坑了。
2. 非泛型的MyClass继承MyClassBase
这个就简单多了,直接按照常规非泛型类的继承写法来就行——和泛型类同名完全没问题,C#会把它们当作不同的类型区分:
class MyClass : MyClassBase { // 非泛型类的成员逻辑 }
完整代码参考
把基类、泛型类、非泛型类放在一起的完整示例如下:
// 先定义基类MyClassBase class MyClassBase { // 基类的成员(比如公共方法、属性) } // 泛型版本:继承基类 + 约束T为IEnumerable class MyClass<T> : MyClassBase where T : IEnumerable { // 泛型类的具体实现 } // 非泛型版本:直接继承基类 class MyClass : MyClassBase { // 非泛型类的具体实现 }
这样写就不会有语法错误啦,核心就是记住泛型类声明时继承在前,约束在后的顺序~
内容的提问来源于stack exchange,提问作者Tomáš Zato
相关产品推荐
相关产品推荐

