using System;
public class A
{
public virtual void F()
{
Console.WriteLine( "A.F() ");
}
}
class B:A
{
public override void F() //
这才叫多态{
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();
}
}
//请参看输出结果
A a; a = b;//基类的引用指向派生类的对象,调用派生类的方法 a.F(); a = c;//基类的引用指向派生类的对象,调用基类的方法 a.F();
|
上面从语法上讲了,我从底层实现讲讲吧,呵呵
基础知识:
每个类有一个方法表,每个方法称之为方法槽
虚方法重载后
重载的方法重写这个方法槽
new
新增方法槽,原有的方法槽保留在原位置,所以当基类的引用根据相同的索引查找过来时,找到的时原来的方法。 new 相当于隐藏
故有以上的行为
posted on 2011-04-08 22:47
luis 阅读(187)
评论(0) 编辑 收藏 引用