重载和覆盖问题

Ram*_*mar 5 c# overriding overloading

我想覆盖一个方法(method(int x)):

public class A 
{
    public virtual void method(int x)
    {
        Console.WriteLine("base");
    }
}

public class B : A
{
    public override void method(int x)     
    { 
        Console.WriteLine("overridden");
    }

    public void method(Double x)    
    {
        Console.WriteLine("overloaded");
    } 
} 
Run Code Online (Sandbox Code Playgroud)

而我这样称呼它:

public static class Program  
{   
    public static void Main() 
    {
        B obj = new B();
        obj.method(1);
    } 
}
Run Code Online (Sandbox Code Playgroud)

出于某种原因,打印"重载"并且不像我期望的那样"覆盖".如果我更改class B为以下,Main方法现在打印"覆盖":

public class B
{
    public void method(int x)     
    { 
        Console.WriteLine("overridden");
    }

    public void method(Double x)    
    {
        Console.WriteLine("overloaded");
    } 
} 
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

Mas*_*ter 0

您没有覆盖该函数,而是重载了它。如果你将 1 转换为 int,它应该可以工作。