C-v*_*-va 10 c# dynamic-binding
class A
{
public virtual void WhoAreYou() { Console.WriteLine("I am an A"); }
}
class B : A
{
public override void WhoAreYou() { Console.WriteLine("I am a B"); }
}
class C : B
{
public new virtual void WhoAreYou() { Console.WriteLine("I am a C"); }
}
class D : C
{
public override void WhoAreYou() { Console.WriteLine("I am a D"); }
}
C c = new D();
c.WhoAreYou();// "I am a D"
A a = new D();
a.WhoAreYou();// "I am a B" !!!!
Run Code Online (Sandbox Code Playgroud)
如何在内部分配引用,引用A包含B的引用? 谁能解释一下怎么回事?
类C,该方法WhoAreYou()不会覆盖基类的方法,因为它与定义new还增加了一个关键字新与所述方法相同,其名称隐藏的基类的方法.这就是为什么:
C c = new D();
c.WhoAreYou();// "I am a D"
Run Code Online (Sandbox Code Playgroud)
调用重写的方法,在D该方法中覆盖用new关键字定义的基类方法.
但是,当目标类型是A,那么:
A a = new D();
a.WhoAreYou();// "I am a B" !!!!
Run Code Online (Sandbox Code Playgroud)
B当你正在调用方法被覆盖a的类型A的方法时,调用重写的方法B.
| 归档时间: |
|
| 查看次数: |
8343 次 |
| 最近记录: |