【C#学习笔记(一)】override关键字详解(转载)

前言

C# 中有重写、重载、覆写的概念,分别对应的关键字是override、overload、new,在本文中主要介绍 override 关键字,主要参考了此篇文章C# 重写(override)

正文

1、重写、重载、覆写简介

1.重写(override)

重写(override):子类对父类中方法进行按照自身需要进行对方法体进行重写,重写方法与父类方法在访问权限、返回值、方法名以及参数不变。

2.重载(overload)

重载(overload):在一个类中对同一方法名按照不同的需求编写出多个方法,方法名相同,但是参数的类型或者个数不能相同,返回值类型不能作为重载的标志。

3.覆写(new)

覆写(overwrite):用 new 实现。在子类中用 new 关键字修饰定义的与父类中同名的方法,也称为覆盖,覆盖不会改变父类方法的功能。

2、重写的具体示例

using System;

namespace ConsoleApp
{
    
    
    class Program
    {
    
    
        static void Main(string[] args)
        {
    
    
            A a = new B();
            a.Print();
        }
    }

    class A
    {
    
    
        public A()
        {
    
    
            //构造函数
            Print();
        }
        public virtual void Print()
        {
    
    
            Console.WriteLine("我是A类");
        }
    }

    class B:A
    {
    
    
        public B()
        {
    
    
            //构造函数
            Print();
        }
        public override void Print()
        {
    
    
            Console.WriteLine("我是B类"); //重写Print()方法
        }
    }
}


在上段代码中,A类是父类,B类是子类,重写了A类中的 Print() 方法。

3、对父类方法进行重写的条件

  1. 父类中方法必须被 virtual 关键字修饰的方法才能被子类重写,如果父类方法没有使用 virtual 关键字,在子类中重写父类方法时就会编译错误;
  2. 虚方法:基类中定义的允许在派生类中重写的方法,使用virtual关键字定义;
  3. 在子类中对父类进行重写时,需要使用 override 关键字作为标识;
  4. 例如 B 类继承 A 类,并重写 A 类中 Print() 方法时,没有使用 override 关键字的的话会出现下列的警告。
    在这里插入图片描述

4、父类方法被子类重写之后,通过创建子类对象指向父类时,调用重写方法时,调用的是父类还是子类的方法

当父类方法被子类重写之后,只要创建子类的实例,当调用被重写的方法时,最终运行的都是子类中的方法。

代码运行的结果:
在这里插入图片描述

  1. 在创建子类的实例时,首先运行子类中的构造函数,但是会先执行父类中的构造函数;
  2. 当执行父类中构造函数中 Print() 方法时,先判断 Print() 方法是否已经被重写,如果该方法被重写的话,则会执行子类中重写的方法;
  3. 执行完成父类的构造函数之后,就会执行子类中构造函数,子类构造函数调用 Print() 函数时,会先判断子类中是否含有 Print() 方法,有的话则会调用自身的 Print() 方法,否则调用父类中 Print() 方法;
  4. 最后 a.Print() 也是首先判断A类中 Print() 方法是否被重写,如果被重写的话则调用B类中 Print() 方法。

5、子类中的重写方法被new关键字而不是override关键字修饰时,父类中方法是否被重写

不会被重写,被 new 关键字修饰后,Print() 方法不是重写方法,而是B类中的新方法。
在这里插入图片描述
通过上图的运行结果,说明当使用了 new 关键字之后,只要跟父类有关,运行的 Print() 方法都是运行父类中 Print() 方法。

猜你喜欢

转载自blog.csdn.net/sallyyellow/article/details/131719300