好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

C# 函数覆盖总结学习(推荐)

覆盖类成员: 通过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# 函数覆盖总结学习(推荐)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。

dy("nrwz");

查看更多关于C# 函数覆盖总结学习(推荐)的详细内容...

  阅读:49次