Raj*_*han 6 c# inheritance overloading
我已将代码简化为此
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)");
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题是这个电话
public void AddToTotal(double currency)
Run Code Online (Sandbox Code Playgroud)
虽然我用int调用它,它应该使用
public override void AddToTotal(int number)
Run Code Online (Sandbox Code Playgroud)
使用父级返回预期结果.
Parent d = new Child();
int i = 100;
d.AddToTotal(i);
Run Code Online (Sandbox Code Playgroud)
更新:
感谢@Jan和@azyberezovsky指出我的规范.我已经向基类添加了一个虚拟的空方法,以便现在解决这个问题.
甲成员查找在类型T的名称为N的处理过程如下:
首先,构造在T中声明的名为N的所有可访问成员的集合,并构造T的基本类型.包含覆盖修饰符的声明将从集合中排除.如果没有名为N的成员存在且可访问,则查找不会产生匹配,并且不评估以下步骤.
因此,当您使用Child类型的变量时
Child d = new Child();
int i = 100;
d.AddToTotal(i);
Run Code Online (Sandbox Code Playgroud)
方法public override void AddToTotal(int number)
被排除在集合之外,我们只有一个名称为N的方法.Int被隐式转换为double,因此不会发生错误.