A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© sunrise2 高级黑马   /  2014-7-22 22:44  /  757 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

覆盖类成员:通过new关键字修饰虚函数表示覆盖该虚函数。
一个虚函数被覆盖后,任何父类变量都不能访问该虚函数的具体实现。
  1. public virtual void IntroduceMyself(){...}//父类虚函数
  2. public new void IntroduceMyself(){...}//子类覆盖父类虚函数
复制代码
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;

  5. namespace MethodOverrideByNew
  6. {
  7.     public enum Genders {
  8.         Female=0,
  9.         Male=1
  10.     }
  11.     public class Person {
  12.         protected string _name;
  13.         protected int _age;
  14.         protected Genders _gender;
  15.         /// <summary>
  16.         /// 父类构造函数
  17.         /// </summary>
  18.         public Person() {
  19.             this._name = "DefaultName";
  20.             this._age = 23;
  21.             this._gender = Genders.Male;
  22.         }
  23.         /// <summary>
  24.         /// 定义虚函数IntroduceMyself()
  25.         /// </summary>
  26.         public virtual void IntroduceMyself() {
  27.             System.Console.WriteLine("Person.IntroduceMyself()");
  28.         }
  29.         /// <summary>
  30.         /// 定义虚函数PrintName()
  31.         /// </summary>
  32.         public virtual void PrintName() {
  33.             System.Console.WriteLine("Person.PrintName()");
  34.         }
  35.     }
  36.     public class ChinesePerson :Person{
  37.         /// <summary>
  38.         /// 子类构造函数,指明从父类无参构造函数调用起
  39.         /// </summary>
  40.         public ChinesePerson() :base(){
  41.             this._name = "DefaultChineseName";
  42.         }
  43.         /// <summary>
  44.         /// 覆盖父类方法IntroduceMyself,使用new关键字修饰虚函数
  45.         /// </summary>
  46.         public new void IntroduceMyself() {
  47.             System.Console.WriteLine("ChinesePerson.IntroduceMyself()");
  48.         }
  49.         /// <summary>
  50.         /// 重载父类方法PrintName,使用override关键字修饰虚函数
  51.         /// </summary>
  52.         public override void PrintName(){
  53.             System.Console.WriteLine("ChinesePerson.PrintName()");            
  54.         }
  55.     }

  56.     class Program
  57.     {
  58.         static void Main(string[] args)
  59.         {
  60.             //定义两个对象,一个父类对象,一个子类对象
  61.             Person aPerson = new ChinesePerson();
  62.             ChinesePerson cnPerson = new ChinesePerson();
  63.             //调用覆盖的方法,父类对象不能调用子类覆盖过的方法,只能调用自身的虚函数方法
  64.             aPerson.IntroduceMyself();      
  65.             cnPerson.IntroduceMyself();
  66.             //调用重载方法,父类对象和子类对象都可以调用子类重载过后的方法
  67.             aPerson.PrintName();
  68.             cnPerson.PrintName();

  69.             System.Console.ReadLine();
  70.         }
  71.     }
  72. }
复制代码
结果:
  1. Person.IntroduceMyself()
  2. ChinesePerson.IntroduceMyself()
  3. ChinesePerson.PrintName()
  4. ChinesePerson.PrintName()
复制代码


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马