重载、重写---C#

来源:互联网 发布:王宝强 日本 知乎 编辑:程序博客网 时间:2024/04/30 09:35

首先,知道什么是方法?

  • 方法是由 方法签名 和一系列语句的代码块 组成。
  • 方法签名包括方法的访问级别(如:public 或private)、可修饰符(如:static 或者abstract或者virtual。。)、方法名称参数
  • 方法分类
    1).静态方法:
    被static关键字修饰的方法,成为静态方法,此时的静态方法属于类级别,不能通过类的实例进行访问,只能通过方法所在的类名字点出来这个静态方法名字。

    下面的代码演示静态方法的定义和调用:
    这里写图片描述

    2).实例方法:
    相反,实例方法就是方法前面不加关键字static,直接通过new运算符,实例化一个对象后,通过创建的对象来点出来,实例方法;而且,它是不能通过类名字点出来实例方法的。
    下面的代码演示实例方法的定义和调用:
    这里写图片描述

重载

  • 指的是方法的方法名相同,但是参数列表(参数的类型,参数的个数,参数顺序)不一样,这些方法互称为方法的重载
  • 重载是平行的。是一个类的内部的方法名称一样参数列表不一样的多个方法,以实现不同的需求(相同的功能)。

    下面的代码演示方法重载得到的一些方法:
    这里写图片描述

    是重载的如下:
    这里写图片描述

重写

  • 重写是垂直的。是子类(派生类)对父类(基类)同名方法的重新实现。
  • 由于父类的方法不能够完成某种功能,但是还必须得调用这个方法,则子类可以重写父类中的这个方法,加强其功能。
  • 在父类里面,如果一个方法可以让子类重写,必须在方法的返回类型前面用virtual、abstract、voerride(继承了父类的虚方法)关键字来修饰。说明这个方法可以被子类重写。

    下面的代码演示方法重写得到的一些方法:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace _001基础{    class Program    {        static void Main(string[] args)        {            Animal horse = new Horse();            horse.Voice();            Animal sheep = new Sheep();            //相同类型的对象调用相同的方法表现出不同的行为            sheep.Voice();            Console.ReadKey();        }    }    //动物父类    public class Animal    {        //几乎所有的动物都具有发出声音的能力        //但是对于动物的子类来说,每个子类发出的声音都是不一样的        public virtual void Voice()        {            Console.WriteLine("动物开始发出声音了");        }    }    //马(子类),子类应该重写父类中的方法,以实现自己特有的行为    public class Horse : Animal    {         //通过override关键字来重写父类中方法        public override void Voice()        {            //调用父类中的方法            base.Voice();            Console.WriteLine("马发出嘶嘶。。。。嘶嘶。。。的声音");        }    }    //羊(子类)    public class Sheep : Animal    {        public override void Voice()        {            base.Voice();            Console.WriteLine("羊发出咩。。。咩。。。。的声音");        }    }}

结果:
这里写图片描述

阻止派生类重写虚成员—-

怎么停止对马类中的voice方法继续重写?使用sealed关键字,停止继续重新父类中方法

 public class Horse : Animal    {         //通过override关键字来重写父类中方法        public sealed override void Voice()        {            //调用父类中的方法            base.Voice();            Console.WriteLine("马发出嘶嘶。。。。嘶嘶。。。的声音");        }    }
此时如果再有类继承这个“马”类,就不能继承该vocice方法了
0 0
原创粉丝点击