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

为何局部同名方法无法访问类中不同签名的同名重载方法?

问题解答:局部方法无法访问类中同名重载方法的原因

这是C#的**名称遮蔽(Shadowing)**机制导致的:当局部作用域里定义了和外层作用域同名的成员时,局部成员会“覆盖”外层的同名成员——编译器查找名称时,会从当前最内层的作用域开始找,只有当前作用域找不到匹配项,才会逐步往外找。

具体到你的代码场景:

  • 在OuterMethod里定义了局部方法InnerMethod(),这个名称和类级别的InnerMethod(string)完全同名。
  • 当你在局部InnerMethod()内部调用InnerMethod("hello")时,编译器首先在当前作用域的外层(也就是这个无参局部方法所在的OuterMethod局部作用域)查找InnerMethod,找到的是那个无参的局部方法,而它没有接受string参数的重载,所以直接抛出CS1501错误,根本不会去查找类级别的同名方法。
  • 而调用Test("hello")时,局部作用域里没有任何叫Test的方法,编译器就会继续向外查找,最终找到类里的Test(string)方法,因此可以正常执行。

如果要让局部方法访问类级别的InnerMethod(string),可以用this关键字明确指定调用类的成员,避免名称混淆:

void InnerMethod()
{
    Test("hello");  // 正常调用类方法
    this.InnerMethod("hello");  // 通过this明确指向类的方法,解决报错问题
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 04:28:21