微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 编译器选择错误的重载

好吧,我有一个派生类,它对我的​​基类上的方法一个重载.我调用我认为与基类的方法签名匹配的东西,而是调用我的派生类实现. (下面的代码总是打印出“MyDerived”)这是为什么?
public class MyBase
    {
        public void DoSomething(int a)
        {
            Console.WriteLine("MyBase");
        }
    }

    public class MyDerived : MyBase
    {
        public void DoSomething(long a)
        {
            Console.WriteLine("MyDerived");
        }
    }


Main()
{
    MyDerived d = new MyDerived();
    d.DoSomething((int)5);
}

解决方法

大多数人认为基类上的DoSomething(int)重载比DoSomething(long)重载更好.

但是,由于变量是派生类型,因此将调用该版本的DoSomething. .NET运行时始终支持最派生的编译时类型.

如果它找到一个可以在派生类型上工作的方法签名,它将在移动到任何基类方法之前使用它.通常,应避免重载基类中定义的方法.

原文地址:https://www.jb51.cc/csharp/91241.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐