using System;
public class A
{
public virtual void F()
{
Console.WriteLine( "A.F() ");
}
}
class B:A
{
public override void F() //
這才叫多態(tài){
Console.WriteLine( "B.F() ");
}
}
class C:A
{
public new void F() //用
new 來(lái)隱藏
{
Console.WriteLine( "C.F() ");
}
}
class Test
{
public static void Main()
{
B b = new B();
b.F();
C c = new C();
c.F();
A a;
a = b;
a.F();
a = c;
a.F();
}
}
//請(qǐng)參看輸出結(jié)果
A a; a = b;//基類的引用指向派生類的對(duì)象,調(diào)用派生類的方法 a.F(); a = c;//基類的引用指向派生類的對(duì)象,調(diào)用基類的方法 a.F();
|
上面從語(yǔ)法上講了,我從底層實(shí)現(xiàn)講講吧,呵呵
基礎(chǔ)知識(shí):
每個(gè)類有一個(gè)方法表,每個(gè)方法稱之為方法槽
虛方法重載后
重載的方法重寫這個(gè)方法槽
new
新增方法槽,原有的方法槽保留在原位置,所以當(dāng)基類的引用根據(jù)相同的索引查找過(guò)來(lái)時(shí),找到的時(shí)原來(lái)的方法。 new 相當(dāng)于隱藏
故有以上的行為
posted on 2011-04-08 22:47
luis 閱讀(194)
評(píng)論(0) 編輯 收藏 引用