c# – 编译器选择错误的重载
发布时间:2020-12-15 04:34:33 所属栏目:百科 来源:网络整理
导读:好吧,我有一个派生类,它对我的??基类上的方法有一个重载.我调用我认为与基类的方法签名匹配的东西,而是调用我的派生类实现. (下面的代码总是打印出“MyDerived”)这是为什么? public class MyBase { public void DoSomething(int a) { Console.WriteLine("M
好吧,我有一个派生类,它对我的??基类上的方法有一个重载.我调用我认为与基类的方法签名匹配的东西,而是调用我的派生类实现. (下面的代码总是打印出“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运行时始终支持最派生的编译时类型. 如果它找到一个可以在派生类型上工作的方法签名,它将在移动到任何基类方法之前使用它.通常,应避免重载基类中定义的方法. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读