首页 > 编程语言 >浅谈C#中重写和隐藏的区别

浅谈C#中重写和隐藏的区别

时间:2024-04-23 19:26:26浏览次数:18  
标签:oil Console 浅谈 C# Drive WriteLine 重写 Refuel transport

重写

派生类与基类中方法名、返回参数类型、参数个数均一致,就称派生类重写了基类中的方法。

using System;
using System.Collections.Generic;

namespace Day0
{
    class Program
    {
        static void Main(string[] args)
        {
            Transport transport = new Transport();
            Car car = new Car();
            Bicycle bicycle = new Bicycle();

            transport.Drive();
            transport.Refuel();
            Console.WriteLine("transport oil = "+transport.oil);
            Console.WriteLine("==============");
            transport = car;
            transport.Drive();
            transport.Refuel();
            Console.WriteLine("transport oil = " + transport.oil);
            car.Drive();
            car.Refuel();
            Console.WriteLine("transport oil = " + transport.oil);
            Console.WriteLine("car oil = " + car.oil);
            Console.WriteLine("==============");
            transport = bicycle;
            transport.Drive();
            transport.Refuel();
            Console.WriteLine("transport oil = " + transport.oil);
            bicycle.Drive();
            bicycle.Refuel();
            Console.WriteLine("transport oil = " + transport.oil);
            Console.WriteLine("bicyle oil = " + bicycle.oil);

        }
    }
    class Transport
    {
        public int oil = 100;
        public virtual void Drive()
        {
            Console.WriteLine("驾驶交通工具...");
            oil -= 20;
        }
        public void Refuel()
        {
            Console.WriteLine("默认加注燃料");
            oil += 20;
        }

    }
    class Car : Transport
    {
        public override void Drive()
        {
            oil -= 30;
            Console.WriteLine("驾驶小轿车...");
        }
        public new void Refuel()
        {
            oil += 30;
            Console.WriteLine("小汽车加注燃料");
        }
    }
    class Bicycle : Transport
    {
        public override void Drive()
        {
            oil -= 0;
            Console.WriteLine("骑自行车...");
        }
        public new void Refuel()
        {
            oil += 0;
            Console.WriteLine("自行车加注燃料");
        }
    }

}

  运行结果

 

 可以看出重写是多态的,当我们调用Drive方法时候,子类方法是覆盖掉父类中的方法的;而对于隐藏父类方法并不会被覆盖。

归其原因,重写是子类方法表添加新的记录,运行时修改父级方法表中地址,所以transport 是因为Drive方法地址被修改了出现多态。(动态绑定)

而隐藏仅仅是在子类方法表中添加新的记录,子类型引用调用子类型方法(Refuel),父类型引用调用父类Refuel方法(静态绑定)编译时便确定。

 

标签:oil,Console,浅谈,C#,Drive,WriteLine,重写,Refuel,transport
From: https://www.cnblogs.com/happyu/p/18153176

相关文章

  • 用Python程序如何捕获Ctrl+C终止信号?
    对于一些连续运行或者长时间运行的Python程序而言,如服务器的后端,或者是长时间运行的科学计算程序。当我们涉及到一些中途退出的操作时,比如使用Ctrl+C来退出正在运行的程序。这种场景的出现一般有两个可能性:一是程序出现了问题,需要终止程序来对其进行调整。另一种是程序本身是正......
  • AtCoder Beginner Contest 350 A - G 题解
    AtCoderBeginnerContest350A-PastABCsSolution把最后三个字符转成数字判断即可Code#include<bits/stdc++.h>usingnamespacestd;intmain(){strings;cin>>s;s=s.substr(3,3);intx=0;x=(s[0]-'0')*100+(s[1]-�......
  • img case1
    <body><divclass="slider"><divclass="slider-wrapper"><imgsrc="./test1.png"alt=""/><divclass="box">X</div><......
  • python3下安装mysqlclient各种报错 raise OSError mysql_config not found
    linux下载地址:https://files.pythonhosted.org/packages/a5/e1/e5f2b231c05dc51d9d87fa5066f90d1405345c54b14b0b11a1c859020f21/mysqlclient-2.0.1.tar.gz#sha256=fb2f75aea14722390d2d8ddf384ad99da708c707a96656210a7be8af20a2c5e5在服务器执行pipinstallmysqlclient-2.0.......
  • Tebo ICT 腾博V3.0测试软件
    TeboICTV3.0是一款专业的ICT(In-CircuitTest,在线测试)和ATE(AutomaticTestEquipment,自动测试设备)以下是关于TeboICTV3.0的一些特点和功能:CAD和GERBER输入接口:同时支持CAD和GERBER输入,方便导入设计文件。中文界面:软件采用中文界面,操作方便,易于上手。系统兼容性......
  • WiseCAM-Tube 激光切割的套料软件介绍
    WiseCAM-Tube是一款用于管材激光切割的套料软件,具有以下功能:•自动应用工艺:零件载入时自动应用割缝补偿、微连、引刀线工艺,无需单个添加工艺,缩短处理时间。•空间引线:支持批量添加空间引入引出线,解决异型管咬边区域过烧和切不断问题。•法向镜像:支持工字钢法向量镜像复制,法......
  • 使用 Dockerfile 构建和定制 Docker 镜像
    前言Dockerfile是用于构建Docker镜像的文本文件,其中包含了一系列指令和参数,用于定义镜像的内容、环境和运行方式。本文将介绍如何编写和使用Dockerfile,以及常用的指令和技巧,帮助大家快速掌握Docker镜像的构建和定制过程。什么是DockerfileDockerfile是一个文本文件,其内......
  • docker-compose 安装部署ElasticSearch 和 Kibana
    项目需要搭建es环境,踩了一些坑,记录下首选还是通过docker搭建,而通过docker最佳的部署方式就是dockercompose1.docker-compose.ymlversion:"3.1"#服务配置services:elasticsearch:container_name:es01image:elasticsearch:8.12.2restart:unless-stopp......
  • Caprine:适用于Linux的Facebook Messenger桌面应用程序
    Caprine是一款Linux桌面应用程序,可让您直接从计算机访问FacebookMessenger 。它提供了一种在Messenger上与朋友和家人聊天的便捷方式,无需打开网络浏览器。Caprine提供了类似于Messenger移动应用程序的用户友好界面,使其易于导航和使用。您可以接收新消息的通知、发送表情......
  • Docker从入门到精通:Docker log 命令学习
    前言在使用Docker进行应用程序容器化的过程中,日志管理是一个至关重要的方面。通过有效地管理容器的日志,我们可以快速诊断问题、监视应用程序的运行状况以及确保系统的健康运行。Docker提供了强大的日志管理功能,而dockerlog命令则是我们在日常工作中经常使用的工具之一。本......