首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >重载、重写---C#

重载、重写---C#

作者头像
静心物语313
发布2020-03-24 16:41:51
1.1K0
发布2020-03-24 16:41:51
举报

首先,知道什么是方法?

  • 方法是由 方法签名 和一系列语句的代码块 组成。
  • 方法签名包括方法的访问级别(如: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方法了 
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 首先,知道什么是方法?
  • 重载
  • 重写
    • 阻止派生类重写虚成员—-
      • 怎么停止对马类中的voice方法继续重写?使用sealed关键字,停止继续重新父类中方法
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档