为何泛型类可使用不同泛型参数继承自身?相关代码疑问
关于泛型类继承的两个问题解答
先看你给出的泛型类定义:
public class MyClass<T> : MyClass<T, OtherInfo>
1. 该类是否属于继承自身的情况?
不属于。
泛型类本质是一种“类型模板”,当指定的泛型参数列表(参数数量或具体类型不同)不同时,会生成完全独立的类型。这里MyClass<T>是单参数泛型类,它继承的MyClass<T, OtherInfo>是双参数泛型类的开放构造类型——两者泛型参数数量不同,是完全不同的类型,并非同一个类,所以不存在“继承自身”的问题。
2. 为何允许这样的实现?
这种写法是合法的,核心原因有两点:
- 简化使用,模拟默认泛型参数:在早期不支持默认泛型类型参数的C#版本中,这种写法可以实现类似“默认参数”的效果。如果大部分场景下第二个泛型参数固定为
OtherInfo,定义单参数的MyClass<T>后,使用者可以直接写MyClass<int>,不用每次重复指定MyClass<int, OtherInfo>,减少冗余代码。 - 符合泛型继承规则:只要被继承的泛型类型(这里的双参数
MyClass<T,U>)是已定义的合法类型,编译器就允许这种继承关系。因为MyClass<T>和MyClass<T, OtherInfo>是不同类型,不会造成class A : A这类循环继承的非法情况,所以编译器不会禁止。
内容的提问来源于stack exchange,提问作者rickster26ter1
相关产品推荐
相关产品推荐

