【发布时间】:2012-03-28 14:59:20
【问题描述】:
我已经将我的代码简化为这个
internal class Program
{
private static void Main(string[] args)
{
Child d = new Child();
int i = 100;
d.AddToTotal(i);
Console.ReadKey();
}
private class Parent
{
public virtual void AddToTotal(int x)
{
Console.WriteLine("Parent.AddToTotal(int)");
}
}
private class Child : Parent
{
public override void AddToTotal(int number)
{
Console.WriteLine("Child.AddToTotal(int)");
}
public void AddToTotal(double currency)
{
Console.WriteLine("Child.AddToTotal(double)");
}
}
}
问题是这调用了
public void AddToTotal(double currency)
虽然我用 int 调用它并且它应该使用
public override void AddToTotal(int number)
使用父级返回预期结果。
Parent d = new Child();
int i = 100;
d.AddToTotal(i);
更新:
感谢@Jan 和@azyberezovsky 将我指向specification。我已经在基类中添加了一个虚拟空方法来解决这个问题。
【问题讨论】:
-
嗯,我能够复制结果,并确保它不仅仅是 int 重载的方法名称不同的错字。
-
d.AddToTotal(number:i)调用 int 重载,正如预期的那样,但你不应该这样做...... -
查看这个答案以获得解释:stackoverflow.com/a/1833268/25727
-
这个方法隐藏了吗?如果签名不一样,你能隐藏一个基本方法吗?
标签: c# inheritance overloading