C#使用new关键字隐藏方法时如何继承原方法的文档注释
C# 子类new隐藏父类方法时继承父类文档注释的可行方案
默认无参数的<inheritdoc/>标签对new修饰的隐藏成员无效,核心原因是new关键字声明的是与父类同签名的全新独立成员,不属于虚方法重写(override)的成员继承链路,XML注释的默认解析规则不会自动关联父类的同名同签名方法。
可直接生效的通用方案
显式给<inheritdoc/>标签添加cref属性,直接指定要继承注释的父类成员路径即可,这个写法被Visual Studio、Rider等主流IDE的智能提示,以及DocFX、Sandcastle等主流文档生成工具原生支持,无需额外配置。
修改后的子类代码示例:
public class Parent { /// <summary> /// Boo!!! /// </summary> public void Foo() { // ... code here } } public class Child : Parent { /// <inheritdoc cref="Parent.Foo()"/> /// <remarks> /// 子类实现会先调用父类原始逻辑,再执行额外的扩展操作 /// </remarks> public new void Foo() { base.Foo(); // ... additional logic here } }
方案特点
- 会完整继承父类对应方法的所有注释内容,包括摘要、参数说明、返回值说明、异常声明等所有XML注释节点
- 如果父类方法带参数,cref中只要按C#的类型简写写入方法签名即可,例如父类方法为
void Foo(string msg)时,路径写为Parent.Foo(string)即可正确匹配 - 支持在继承注释的基础上追加子类专属的补充注释,追加内容不会覆盖从父类继承的文档
- 零额外配置,写对cref的指向路径即可在IDE智能提示、文档生成场景同时生效
批量场景的可选方案
如果项目中存在大量new隐藏的成员需要继承父类注释,可以针对使用的文档生成工具配置成员映射规则:
- 对DocFX可配置
memberLayout相关规则,添加同签名隐藏成员的注释查找逻辑 - 对Sandcastle Help File Builder可配置Inherited Documentation的解析规则,纳入非重写的同签名成员
注意:这类配置仅对最终生成的站点/文档文件生效,IDE编辑时的智能提示不会识别这类自定义规则,日常开发优先选择显式指定cref的方案。
内容的提问来源于stack exchange,提问作者MsCProg
相关产品推荐
相关产品推荐

