有没有人能解释一下为什么这段代码会显示Derived.DoWork(double)
。我可以为这种行为想出一些解释,但我希望有人为我澄清这一点。
using System;
public class Base
{
public virtual void DoWork(int param) {
Console.WriteLine("Base.DoWork");
}
}
public class Derived : Base
{
public override void DoWork(int param) {
Console.WriteLine("Derived.DoWork(int)");
}
public void DoWork(double param) {
Console.WriteLine("Derived.DoWork(double)");
}
public static void Main() {
int val = 5;
Derived d = new Derived();
d.DoWork(val);
}
}
发布于 2014-05-13 01:50:56
这种行为显然是有意为之的:
‘选择重载时,如果在派生类中声明了任何兼容的方法,则在基类中声明的所有签名都将被忽略-即使它们在同一派生类中被重写!’http://social.msdn.microsoft.com/Forums/vstudio/en-US/a70b25d4-f310-4d06-9dc2-a453f822f4f3/function-not-getting-called-when-overloading-the-function-of-base-class-in-derived-class-with?forum=csharpgeneral
https://stackoverflow.com/questions/23615356
复制相似问题