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

(0)

相关推荐

  • 全面解读C#编程中的析构函数用法

    析构函数用于析构类的实例. 备注 不能在结构中定义析构函数.只能对类使用析构函数. 一个类只能有一个析构函数. 无法继承或重载析构函数. 无法调用析构函数.它们是被自动调用的. 析构函数既没有修饰符,也没有参数. 例如,下面是类 Car 的析构函数的声明: class Car { ~Car() // destructor { // cleanup statements... } } 该析构函数隐式地对对象的基类调用 Finalize.这样,前面的析构函数代码被隐式地转换为以下代码: protec

  • 解析C#中的私有构造函数和静态构造函数

    私有构造函数 私有构造函数是一种特殊的实例构造函数.它通常用在只包含静态成员的类中.如果类具有一个或多个私有构造函数而没有公共构造函数,则其他类(除嵌套类外)无法创建该类的实例.例如: class NLog { // Private Constructor: private NLog() { } public static double e = Math.E; //2.71828... } 声明空构造函数可阻止自动生成默认构造函数.注意,如果您不对构造函数使用访问修饰符,则在默认情况下它仍为私有

  • 详解C#中通过委托来实现回调函数功能的方法

    委托(delegate)是一种可以把引用存储为函数的类型,这类似于c++中的函数指针. 回调函数 c++中的回调函数,就是用函数指针来实现的.类似的,c#中用委托,来实现回调函数的功能. 回调函数为什么被称为回调函数?比如你调用了一个函数,那么就叫调用,但是如果你在调用一个函数的时候,还需要把一个函数提供给该函数,让这个函数来调用你的函数,那么你提供的这个函数就被称为回调函数(callback). 对于python这样的动态语言而言,就没有c#,c++提供特殊的语法实现回调函数,因为在pytho

  • C#中析构函数、Dispose、Close方法的区别

    一.Close与Dispose这两种方法的区别 调用完了对象的Close方法后,此对象有可能被重新进行使用:而Dispose方法来说,此对象所占有的资源需要被标记为无用了,也就是此对象要被销毁,不能再被使用.例如常见.Net类库中的SqlConnection这个类,当调用完Close方法后,可以通过Open重新打开一个数据库连接,当彻底不用这个对象了就可以调用Dispose方法来标记此对象无用,等待GC回收. 二.三者的区别如图 析构函数 Dispose方法 Close方法 意义 销毁对象 销毁

  • C#中Arraylist的sort函数用法实例分析

    本文实例讲述了C#中Arraylist的sort函数用法.分享给大家供大家参考.具体如下: ArrayList的sort函数有几种比较常用的重载: 1.不带参数 2.带一个参数 public virtual void Sort( IComparer comparer ) 参数 comparer 类型:System.Collections.IComparer 比较元素时要使用的 IComparer 实现. - 或 - null 引用(Visual Basic 中为 Nothing)将使用每个元数的

  • C#采用mouse_event函数实现模拟鼠标功能

    下面我通过代码为大家分享下C#模拟鼠标,具体内容如下: 想必有很多人在项目开发中可能遇见需要做模拟鼠标点击的小功能,很多人会在百度过后采用mouse_event这个函数,不过我并不想讨论如何去使用mouse_event函数怎么去使用,因为那没有多大意义. static void mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo) { int x = dx, y = dy; edit_position(dw

  • C# 文件操作函数 创建文件 判断存在

    文件创建: 复制代码 代码如下: File.Create(Application.StartupPath + "\\AlarmSet.txt");//创建该文件 System.IO.Path.GetFileName(filePath)       //返回带扩展名的文件名 System.IO.Path.GetFileNameWithoutExtension(filePath)     //返回不带扩展名的文件名 System.IO.Path.GetDirectoryName(fileP

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

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

  • Java、C++中子类对父类函数覆盖的可访问性缩小的区别介绍

    前言 "Java 和 C++ 中子类对父类函数覆盖的可访问性缩小的问题"的题目看起来比较学术化,但的确是一个容易忽视的问题.本文力求详细阐述这一问题在 Java 以及 C++ 中的区别. 先介绍什么是"子类对父类函数覆盖的可访问性缩小".对于继承而言,子类可以覆盖父类的"虚函数"--尽管 Java 中没有虚函数这一术语,但可以把 Java 的所有函数都看作虚函数,因为 Java 的所有函数都可以被子类覆盖.这里仅借用"虚函数"

  • C语言断言函数assert()的学习笔记

      在C语言库函数中提供了一个辅助调试程序的小型库,它是由assert()宏组成,接收一个整形表达式作为参数.如果表达式的值为假(非零),则assert()宏就在标准错误流(stderr)中写入一条错误信息,并调用abort()函数终止程序.   下面通过一个简单的例子来看一下assert()的用法. int main() { int n = 1; assert(n>=0); printf("%d \r\n",n); system("pause"); retu

  • PHP URL地址获取函数代码(端口等) 推荐

    php 获得当前的脚本网址(只有路径) 复制代码 代码如下: function GetCurUrl() { if(!empty($_SERVER["REQUEST_URI"])) { $scrtName = $_SERVER["REQUEST_URI"]; $nowurl = $scrtName; } else { $scrtName = $_SERVER["PHP_SELF"]; if(empty($_SERVER["QUERY_ST

  • Javascript中 带名 匿名 箭头函数的重要区别(推荐)

    带名函数是指函数显示地给出了一个名字的函数,function abs(x){}.匿名函数是指函数只带有function这个关键字,而没有像abs这种函数名称的函数,如function(){}.ES6标准新增了一种新的函数:Arrow Function(箭头函数)箭头函数表面上相当于匿名函数,并且简化了函数定义.它们各自的区别是什么呢? 1 带名和匿名函数的区别 区别:匿名函数需要讲地址赋值给另一个变量let a,然后再用a来调用函数:而带名函数因为显示地给出了函数名称,所以可以直接用这个函数名称

  • C语言中的函数指针基础学习教程

    顾名思义,函数指针就是函数的指针.它是一个指针,指向一个函数.看例子: A) char * (*fun1)(char * p1,char * p2); B) char * *fun2(char * p1,char * p2); C) char * fun3(char * p1,char * p2); 看看上面三个表达式分别是什么意思? C)这很容易,fun3是函数名,p1,p2是参数,其类型为char *型,函数的返回值为char *类型. B) 也很简单,与C)表达式相比,唯一不同的就是函数的

  • oracle 合并查询 事务 sql函数小知识学习

    表查询: 合并查询:使用union关键字,可将满足条件的重复行去掉. 复制代码 代码如下: select ename,sal,job from emp where sal > 2500 union select ename,sal,job from emp where job = 'MANAGER'; 而union all用法和union相似,但是不会取消重复行. intersect 用来取两个结果的交集. minus用来取两个结果的差集. 使员工scott的岗位,工资,补助与SMITH员工一样

  • C语言编程中函数的基本学习教程

    C 语言中的函数等价于 Fortran 语言中的子程序或函数,也等价于 Pascal 语言中的过程或函数.函数为计算的封装提供了一种简便的方法,此后使用函数时不需要考虑它是如何实现的.使用设计正确的函数,程序员无需考虑功能是如何实现的,而只需知道它具有哪些功能就够了.在 C 语言中可以简单.方便.高效地使用函数.我们经常会看到在定义后仅调用了一次的短函数,这样做可以使代码段更清晰易读. 到目前为止,我们所使用的函数(如 printf.getchar 和 putchar 等)都是函数库中提供的函数

  • 生成静态页面的php函数,php爱好者站推荐

    复制代码 代码如下: <?php  function CreateShtml()  {  ob_start("callback_CteateShtml");  }  function callback_CteateShtml($buffer)  {  $page = intval(@$_REQUEST["page"]);  //$fileName = $_SERVER['DOCUMENT_ROOT'] . dirname($_SERVER['PHP_SELF'

  • JavaScript学习笔记之函数记忆

    本文讲解函数记忆与菲波那切数列的实现,分享给大家,具体如下 定义 函数记忆是指将上次的计算结果缓存起来,当下次调用时,如果遇到相同的参数,就直接返回缓存中的数据. 举个例子: function add(a, b) { return a + b; } // 假设 memorize 可以实现函数记忆 var memoizedAdd = memorize(add); memoizedAdd(1, 2) // 3 memoizedAdd(1, 2) // 相同的参数,第二次调用时,从缓存中取出数据,而非

随机推荐