这是msdn中与阴影和覆盖相关的示例之一:
using System;
namespace test
{
class A
{
public void F() { Console.WriteLine("A.F"); }
public virtual void G() { Console.WriteLine("A.G"); }
}
class B : A
{
new public void F() { Console.WriteLine("B.F"); }
public override void G() { Console.WriteLine("B.G"); }
}
class Test
{
static void Main()
{
B b = new B();
A a = b;
a.F();
b.F();
a.G();
b.G();
Console.WriteLine();
}
}
}
A.F();
B.F();
B.G();
B.G();
I was expecting the out put will be
B.F(); //change is here
B.F();
B.G();
B.G();
因为A a = b; a保存b对象引用,因此它有一个调用派生类函数。
为什么A的功能被调用?
答案 0 :(得分:0)
在运行时,虽然a确实是B类型的变量,但它显式是A类型的变量(A a = b;),因此在运行时因为a被声明为类型A,调用A的F()方法。
希望这有帮助!
N.S。