欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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