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 來隱藏
{
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();
}
}
//請參看輸出結(jié)果
A a; a = b;//基類的引用指向派生類的對象,調(diào)用派生類的方法 a.F(); a = c;//基類的引用指向派生類的對象,調(diào)用基類的方法 a.F();
|
上面從語法上講了,我從底層實現(xiàn)講講吧,呵呵
基礎(chǔ)知識:
每個類有一個方法表,每個方法稱之為方法槽
虛方法重載后
重載的方法重寫這個方法槽
new
新增方法槽,原有的方法槽保留在原位置,所以當基類的引用根據(jù)相同的索引查找過來時,找到的時原來的方法。 new 相當于隱藏
故有以上的行為
posted on 2011-04-08 22:47
luis 閱讀(193)
評論(0) 編輯 收藏 引用