覆盖类成员:通过new关键字修饰虚函数表示覆盖该虚函数。一个虚函数被覆盖后,任何父类变量都不能访问该虚函数的具体实现。public virtual void IntroduceMyself(){...}//父类虚函数public new void IntroduceMyself(){...}//子类覆盖父类虚函数
usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespaceMethodOverrideByNew{publicenumGenders{Female=0,Male=1}publicclassPerson{PRotectedstring_name;protectedint_age;protectedGenders_gender;///<summary>///父类构造函数///</summary>publicPerson(){this._name="DefaultName";this._age=23;this._gender=Genders.Male;}///<summary>///定义虚函数IntroduceMyself()///</summary>publicvirtualvoidIntroduceMyself(){System.Console.WriteLine("Person.IntroduceMyself()");}///<summary>///定义虚函数PrintName()///</summary>publicvirtualvoidPrintName(){System.Console.WriteLine("Person.PrintName()");}}publicclassChinesePerson:Person{///<summary>///子类构造函数,指明从父类无参构造函数调用起///</summary>publicChinesePerson():base(){this._name="DefaultChineseName";}///<summary>///覆盖父类方法IntroduceMyself,使用new关键字修饰虚函数///</summary>publicnewvoidIntroduceMyself(){System.Console.WriteLine("ChinesePerson.IntroduceMyself()");}///<summary>///重载父类方法PrintName,使用override关键字修饰虚函数///</summary>publicoverridevoidPrintName(){System.Console.WriteLine("ChinesePerson.PrintName()");}}classProgram{staticvoidMain(string[]args){//定义两个对象,一个父类对象,一个子类对象PersonaPerson=newChinesePerson();ChinesePersoncnPerson=newChinesePerson();//调用覆盖的方法,父类对象不能调用子类覆盖过的方法,只能调用自身的虚函数方法aPerson.IntroduceMyself();cnPerson.IntroduceMyself();//调用重载方法,父类对象和子类对象都可以调用子类重载过后的方法aPerson.PrintName();cnPerson.PrintName();System.Console.ReadLine();}}}结果:Person.IntroduceMyself()ChinesePerson.IntroduceMyself()ChinesePerson.PrintName()ChinesePerson.PrintName()新闻热点
疑难解答