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

关于被重写方法访问及OverloadResolutionOverride练习的技术咨询

关于OverloadResolutionOverride练习的方法访问问题解答

先帮你把这个问题的核心逻辑捋清楚:

首先,网站里提到的「若编译器在当前类中找到方法调用的匹配签名,则不会再去父类中查找」,其实要补充一个关键细节——编译器会优先在当前类的所有同名方法里匹配参数,哪怕这些方法是不同参数的重载。如果当前类存在同名方法但没有匹配参数的版本,编译器不会自动去父类找同名的匹配方法,而是直接抛出编译错误。

针对你的两个疑问逐一解答:

  1. 重载的Quux(int)是否属于基类而非当前类?
    是的,你当前的子类里并没有定义Quux(int)这个版本,只有其他参数类型的Quux重载(比如假设是Quux(string))。这时候当你在子类里调用Quux(123)时,编译器会先在子类的方法列表里检索所有名为Quux的方法,发现只有Quux(string),但int无法隐式转换为string,匹配失败后就直接报错,不会再去基类找Quux(int)——这就是这个练习要展示的核心场景。

  2. 如何在当前类中精准调用Quux(int)方法?
    只需要用base关键字明确指定调用基类的方法版本即可,代码示例如下:

    base.Quux(100); // 直接调用基类的Quux(int)方法
    

给你一个完整的代码示例辅助理解:

public class BaseClass
{
    public void Quux(int num)
    {
        Console.WriteLine("BaseClass Quux(int): " + num);
    }
}

public class DerivedClass : BaseClass
{
    // 子类的重载方法,遮蔽了基类的Quux(int)
    public void Quux(string str)
    {
        Console.WriteLine("DerivedClass Quux(string): " + str);
    }

    public void TestCalls()
    {
        // Quux(10); // 这里会编译报错,编译器不会自动去基类找匹配
        base.Quux(10); // 正确调用基类的Quux(int)
        Quux("hello"); // 调用子类自己的Quux(string)
    }
}

简单总结:

  • 子类中的同名重载方法会对基类的同名方法形成「名称遮蔽」,编译器只会在当前类的同名方法池中匹配参数,失败则报错,不会自动回溯到基类。
  • 要调用基类的同名方法,必须通过base.方法名(参数)明确指定调用来源。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:38:17