You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检查代码中所有未调用base.foo()的子类foo实现?

找出未调用base.foo()的重写实现的方法

以下是几种简便且安全的方案,按实用性排序:

1. 利用Obsolete特性强制编译报错(最精准)

这是最可靠的方式,能100%定位所有未调用的实现:

  • 先将基类的foo从抽象方法改为带实现的虚方法:
public abstract class A
{
    public virtual void foo()
    {
        // 你的状态更新逻辑
    }
}
  • 给A.foo()添加强制报错的废弃特性:
[Obsolete("必须在重写方法中调用base.foo()", true)]
public virtual void foo()
{
    // 状态更新逻辑
}
  • 重新编译整个解决方案。所有未调用base.foo()的重写方法都会触发编译错误,直接定位到对应代码位置。
  • 修复完所有报错后,移除Obsolete特性即可。

2. Visual Studio 结构搜索与替换(快速定位)

VS的结构搜索能精准匹配代码结构:

  1. 打开编辑 > 查找和替换 > 快速查找(Ctrl+F),点击搜索框右侧的「结构搜索」按钮(带大括号的放大镜图标)。
  2. 输入以下结构模式:
public override void foo()
{
    $statements$
}
  1. 点击「匹配选项」,勾选「排除包含」,并在下方输入base.foo();。
  2. 执行搜索,即可列出所有未调用base.foo()的重写方法。

3. 正则表达式搜索(快速临时排查)

在VS的查找功能中切换到正则表达式模式(点击搜索框左侧的.*按钮),使用以下正则:

public override void foo\(\)\s*\{\s*(?!.*base\.foo\(\);)

该正则会匹配所有foo的重写方法,且方法体内未出现base.foo();的情况。注意根据代码的缩进、换行格式微调正则,确保匹配准确。

4. Roslyn分析器(长期维护管控)

如果需要长期确保所有重写都调用基类方法,可以编写自定义Roslyn分析器:

  • 检测所有重写A.foo()的方法节点。
  • 检查方法体内是否包含base.foo()的调用表达式。
  • 对未调用的情况给出警告或编译错误。
    此方案需要一定的Roslyn开发基础,适合需要持续管控代码规范的场景。

内容的提问来源于stack exchange,提问作者PMF

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 20:42:01