C#要想实现函数的override,要求和C++一样,父类的函数必须用virtual关键字注明,随后在子类中用override关键字表明重写的函数。
子类同名函数定义时,如果什么都不写,或者使用new 关键字,效果都表示父类的同名函数将被隐藏。
也就是说,子类有子类的函数,父类有父类的函数,井水不犯河水。
需要注意的是:若B是A的子类,我们通过 A a = new B()的方式实例化一个B的实例,调用那个函数仍然是调用A的中的函数。
一个简洁的例子:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace PolymophismTest { class Program { static void Main(string[] args) { A btest = new B(); btest.F(); //输出"B.F" btest.G(); //输出"A.G" } } public class A { public virtual void F() { Console.WriteLine("A.F"); } public void G() { Console.WriteLine("A.G"); } } public class B : A { public override void F() { Console.WriteLine("B.F"); } public new void G() { Console.WriteLine("B.G"); } } }