C# 函数覆盖总结学习(推荐)
程序员文章站
2022-06-05 13:35:05
覆盖类成员:通过new关键字修饰虚函数表示覆盖该虚函数。
一个虚函数被覆盖后,任何父类变量都不能访问该虚函数的具体实现。
public virtual void int...
覆盖类成员:通过new关键字修饰虚函数表示覆盖该虚函数。
一个虚函数被覆盖后,任何父类变量都不能访问该虚函数的具体实现。
public virtual void introducemyself(){...}//父类虚函数
public new void introducemyself(){...}//子类覆盖父类虚函数
using system; using system.collections.generic; using system.linq; using system.text; namespace methodoverridebynew { public enum genders { female=0, male=1 } public class person { protected string _name; protected int _age; protected genders _gender; /// <summary> /// 父类构造函数 /// </summary> public person() { this._name = "defaultname"; this._age = 23; this._gender = genders.male; } /// <summary> /// 定义虚函数introducemyself() /// </summary> public virtual void introducemyself() { system.console.writeline("person.introducemyself()"); } /// <summary> /// 定义虚函数printname() /// </summary> public virtual void printname() { system.console.writeline("person.printname()"); } } public class chineseperson :person{ /// <summary> /// 子类构造函数,指明从父类无参构造函数调用起 /// </summary> public chineseperson() :base(){ this._name = "defaultchinesename"; } /// <summary> /// 覆盖父类方法introducemyself,使用new关键字修饰虚函数 /// </summary> public new void introducemyself() { system.console.writeline("chineseperson.introducemyself()"); } /// <summary> /// 重载父类方法printname,使用override关键字修饰虚函数 /// </summary> public override void printname(){ system.console.writeline("chineseperson.printname()"); } } class program { static void main(string[] args) { //定义两个对象,一个父类对象,一个子类对象 person aperson = new chineseperson(); chineseperson cnperson = new chineseperson(); //调用覆盖的方法,父类对象不能调用子类覆盖过的方法,只能调用自身的虚函数方法 aperson.introducemyself(); cnperson.introducemyself(); //调用重载方法,父类对象和子类对象都可以调用子类重载过后的方法 aperson.printname(); cnperson.printname(); system.console.readline(); } } }
结果:
person.introducemyself()
chineseperson.introducemyself()
chineseperson.printname()
chineseperson.printname()
以上这篇c# 函数覆盖总结学习(推荐)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
上一篇: 想知道荞麦粥的做法吗?想知道就看这里
下一篇: php依赖注入知识点详解