C# 如果从子实例调用,则不会调用具有正确数据类型的父方法

C# 如果从子实例调用,则不会调用具有正确数据类型的父方法,c#,C#,代码: class Program { class A { public void abc(int x) { Console.WriteLine("abc from A"); } } class B : A { public void abc(double x) { Console.WriteLine("abc from B");

代码:

class Program
{
    class A
    {
        public void abc(int x)
        {
            Console.WriteLine("abc from A");
        }
    }
    class B : A
    {
        public void abc(double x)
        {
            Console.WriteLine("abc from B");
        }
    }
    static void Main(string[] args)
    {
        B b = new B();
        b.abc(100);
        Console.ReadLine();
    }
}
从类B实例调用abc()方法时, 即使我们将整数数据ie 100作为参数传递,为什么程序的执行会使用double定义的方法参数? 请注意,父类中已经为integer定义了一个方法


为什么上面程序的输出是“B的abc”而不是“A的abc”。请注意。

您的方法过载,您正在观察导致类中存在类似方法解析的原因
B
,这将首先选择继承类中的匹配方法。

您的方法过载,您正在观察导致类中存在类似方法解析的原因
B
比继承类中的匹配方法先选择哪个。

此外,如果将子类中的签名更改为字符串,则会调用父方法。100是一个有效的double,因此将调用隐藏在子类中的函数。此外,如果将子类中的签名更改为例如字符串,则将调用父方法。100是一个有效的双精度数,因此调用隐藏在子对象中的函数。