能否定义继承泛型类型T的MyResult<T>类并添加Capitalized属性?
泛型继承任意类型T的实现问题
原始类定义
public class MyClass { public string FullName { get; set; } }
现有API返回的MyResult类
API客户端返回的MyResult类继承自MyClass,并包含一个Capitalized属性,该属性指向所有字符串属性已转为大写的MyClass实例:
public class MyResult : MyClass { public MyClass Capitalized { get; set; } }
使用示例:
MyResult result = /* 调用API获取实例 */ Console.WriteLine(result.FullName); Console.WriteLine(result.Capitalized.FullName);
期望的泛型版本
希望定义泛型版本MyResult<T>,使其继承任意类型T并包含T类型的Capitalized属性,期望结构如下:
public class MyResult<T> : T { public T Capitalized { get; set; } }
该实现不可行的原因
C#不允许泛型类直接继承类型参数T,核心原因包括:
- 若
T是密封类,密封类本身禁止被继承,写法会直接编译报错; - 若
T是值类型(如int、DateTime等),值类型无法被继承,同样会触发编译错误; - 编译器无法提前确定
T的继承结构,这会破坏C#类型系统的确定性,引发潜在运行时问题。
内容的提问来源于stack exchange,提问作者JuChom
相关产品推荐
相关产品推荐

