【发布时间】:2019-01-31 07:03:51
【问题描述】:
我想重写一个方法 (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");
}
}
我这样称呼它:
public static class Program
{
public static void Main()
{
B obj = new B();
obj.method(1);
}
}
由于某种原因,“重载”被打印出来,而不是我所期望的“覆盖”。如果我将class B 更改为以下内容,Main 方法现在会打印“覆盖”:
public class B
{
public void method(int x)
{
Console.WriteLine("overridden");
}
public void method(Double x)
{
Console.WriteLine("overloaded");
}
}
为什么会这样? 是因为 Override 关键字吗?
【问题讨论】:
-
重载是用不同的签名编写相同的方法,而重写是改变继承方法的行为
-
我添加了一个example,展示了
void method(int x)上的继承和覆盖如何改变行为.. -
@Op,你想解释一下这个行为,还是想解决它?
-
“为什么会这样?” - 我觉得这个问题很清楚。
-
@John 只是第二次打印中的一件小事,它应该是“class c:”而不是“class b”
标签: c# overriding overloading