【发布时间】:2014-12-09 00:03:50
【问题描述】:
问题:有两个类,A 和 B
public abstract class A
{
public A()
{
Console.WriteLine("A");
}
public virtual void Fun()
{
Console.WriteLine("A.Fun()");
}
}
public class B : A
{
public B()
{
Console.WriteLine("B");
}
public new void Fun()
{
Console.WriteLine("B.Fun()");
}
}
如果运行:
public void Main()
{
A a = new B();
a.Fun();
}
输出是:
A
B
A.Fun()
如何解释这个结果,我知道它与抽象和子类有关,但我不知道如何解释。请帮忙。
【问题讨论】:
-
如果您想覆盖该方法,您可能需要使用
override关键字而不是new。 -
如果您想知道“A” - 无论如何都会从
Bs 调用基类构造函数 -
@mikez - 将此作为答案并稍微解释一下
new和override之间的区别 - 会很高兴地支持它 -
@Carsten 随时发布答案并获得积分。我没有时间写出完整的答案。
-
@mikez - 另一个已经做过的NP