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

C#面试题:传入int参数为何调用object参数的方法?

问题原因解析

这是C#中方法名称隐藏和重载解析规则共同作用的结果:

  • 在C#中,当派生类声明一个与基类同名的方法(哪怕参数列表完全不同),这个新方法会隐藏基类中所有同名的方法——包括基类中被派生类重写的Func(int)。
  • 当编译器解析d.Func(i)时,只会优先查找Derived类中直接定义的方法,也就是Func(object)。由于int可以隐式转换为object,编译器会匹配这个方法并执行,而不会去考虑被隐藏的基类Func(int)方法(哪怕派生类已经重写了它)。

验证与解决方法

如果想要调用Derived.Func(int),可以有两种方式:

  1. 将派生类实例转换为基类类型:
    Base d = new Derived();
    int i = 10;
    d.Func(i); // 输出Derived.Func(int)
    
  2. 在Derived类中添加using指令取消名称隐藏:
    public class Derived : Base
    {
        using Base.Func; // 取消基类Func方法的隐藏
        
        public override void Func(int x)
        {
            Console.WriteLine("Derived.Func(int)");
        }
        
        public void Func(object o)
        {
            Console.WriteLine("Derived.Func(object)");
        }
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 18:05:25