publicclass MyClass
{ publicstaticvoid Main()
{
A a =new A();
B b =new B();
BB bb =new BB();
a.Fun();
b.Fun();
bb.Fun();
Console.WriteLine("~~~~~~~~~~~~~~~~~~`");
A ab =new B();
A abb =new BB();
ab.Fun(); //B.Fun() B use override abb.Fun(); //A.Fun() BB use new Console.WriteLine("A ab = new B(); ab's type is {0}", ab.GetType().ToString()); if (ab is A)
Console.WriteLine("But ab is also A");
Console.ReadKey();
}
}
class A
{ publicvirtualvoid Fun()
{
Console.WriteLine("A.Fun()");
}
}
class B : A
{ publicoverridevoid Fun()
{
Console.WriteLine("B.Fun() using 'override'");
}
}
class BB : A
{ publicnewvoid Fun()
{
Console.WriteLine("BB.Fun() using 'new' ");
}
}
好了,让我们来分析一下吧。
代码的前一部分就是“~~~~~~~~~~”之上,应该没有什么好说的了。
关键就是接下来声明“A ab = new B();”后,如果对父类的虚函数方法在子类中使用了override重写,则执行的是子类中的方法。如果在子类中是使用new来重写父类的方法,则执行的是父类的方法。