我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C#中重写及覆盖的区别有哪些

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C#中重写及覆盖的区别有哪些

这篇文章主要介绍了C#中重写及覆盖的区别有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C#中重写及覆盖的区别有哪些文章都会有所收获,下面我们一起来看看吧。

1. 重写和覆盖的定义

1.1 重写(override)的定义

在C#中,用override关键字来重写一个父类中的虚方法或抽象方法。override关键字用于指示编译器,我要用派生类中的一个方法,重写基类中的同名方法。通过重写基类中的方法,可以实现多态性。有关重写与虚方法和抽象方法的详细示例,可移步C#虚方法和抽象方法示例。

override关键字的语法如下:

public override returnType MethodName(ParameterList){    // 方法实现}

其中,public表示访问修饰符;override表示重写虚方法或抽象方法;returnType表示方法的返回类型;MethodName表示方法名称;ParameterList表示方法的参数列表。

需要注意的是,重写方法的访问修饰符必须与被重写方法的访问修饰符相同或更为宽松。

1.2 覆盖(new)的定义

在C#中,用new关键字来覆盖一个父类中的成员方法或成员变量。new关键字用于指示编译器,派生类中的一个方法或变量将隐藏基类中的同名方法或变量,从而改变了继承体系中的原有布局关系。

new关键字的语法如下:

new returnType MemberName(ParameterList){    // 成员实现}

其中,returnType表示成员的返回类型;MemberName表示成员的名称;ParameterList表示成员的参数列表。

2. 两者的区别及示例

下面是一个示例:

//父类  public class FatherClass  {    public virtual string GetName()    {      return "我是父类中的虚拟方法";    }  }  //子类1  public class SonClass1 : FatherClass  {    public override string GetName()    {      return "我是子类1中的重写方法";    }  }  //子类2  public class SonClass2 : FatherClass  {    public new string GetName()    {      return "我是子类2中的覆盖方法";    }  }

随后通过程序入口函数调用:

 public class Program  {    public static void Main(string[] args)    {      FatherClass fatherClass = new FatherClass();      Console.Write("直接调用父类中的虚方法:");      Console.WriteLine(fatherClass.GetName());      SonClass1 s1 = new SonClass1();      Console.Write("直接调用子类1中的重写方法:");      Console.WriteLine(s1.GetName());      SonClass2 s2 = new SonClass2();      Console.Write("直接调用子类2中的覆盖方法:");      Console.WriteLine(s2.GetName());      FatherClass f1 = new SonClass1();      Console.Write("声明父类,调用子类1中的重写方法:");      Console.WriteLine(f1.GetName());      FatherClass f2 = new SonClass2();      Console.Write("声明父类,调用子类2中的覆盖方法:");      Console.WriteLine(f2.GetName());    }  }

运行程序,得到的结果如下:

直接调用父类中的虚方法:我是父类中的虚拟方法
直接调用子类1中的重写方法:我是子类1中的重写方法
直接调用子类2中的覆盖方法:我是子类2中的覆盖方法

声明父类,调用子类1中的重写方法:我是子类1中的重写方法
声明父类,调用子类2中的覆盖方法:我是父类中的虚拟方法

关于“C#中重写及覆盖的区别有哪些”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“C#中重写及覆盖的区别有哪些”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C#中重写及覆盖的区别有哪些

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

C#中重写及覆盖的区别有哪些

这篇文章主要介绍了C#中重写及覆盖的区别有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C#中重写及覆盖的区别有哪些文章都会有所收获,下面我们一起来看看吧。1. 重写和覆盖的定义1.1 重写(overrid
2023-07-05

C++深入探究重载重写覆盖的区别

C++允许多个函数拥有相同的名字,只要它们的参数列表不同就可以,这就是函数的重载(FunctionOverloading),借助重载,一个函数名可以有多种用途
2022-11-13

java覆盖和重写有什么区别

在Java中,覆盖(Overriding)和重写(Overloading)是指子类对父类中的方法进行重新实现的过程。它们的区别如下:1. 定义:覆盖是指子类定义了与父类方法具有相同名称、参数列表和返回类型的方法;重写是指子类定义了与父类方法
2023-10-18

C++覆盖和重载的区别是什么

这篇文章主要讲解了“C++覆盖和重载的区别是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++覆盖和重载的区别是什么”吧!1、覆盖覆盖也称为重写(override)。覆盖是存在类中,子
2023-06-16

java中重载和重写的区别有哪些

这篇文章主要介绍了java中重载和重写的区别有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1.重载重载指在一个类中,具有多个相同名称的方法,他们的参数列表却不相同(参数
2023-06-25

java重载与重写的区别有哪些

本篇内容主要讲解“java重载与重写的区别有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java重载与重写的区别有哪些”吧!区别:1、重载实现的是编译时的多态性,而重写实现的是运行时的多态
2023-07-04

C++ 函数重写:揭开继承中的行为覆盖秘籍

当派生类定义同名且实现不同的函数时,发生函数重写。规则包括:使用 override 关键字。名称、参数和返回类型与基类函数相同。访问权限不得低于基类函数。通过重写,派生类可以覆盖基类行为,实现多态,动态调用不同派生类的同名方法。C++ 函数
C++ 函数重写:揭开继承中的行为覆盖秘籍
2024-04-30

C++中thread和pthread的区别有哪些

C++中的thread是C++11标准引入的线程库,而pthread是POSIX标准中定义的线程库。它们之间的主要区别如下:1. 语法差异:pthread是基于C语言的线程库,而thread是C++的线程库,因此在语法上有一些差异。thre
2023-10-20

C#中隐藏、重写、重载的区别是什么

这篇文章主要讲解了“C#中隐藏、重写、重载的区别是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#中隐藏、重写、重载的区别是什么”吧!C#重载、C#重写和C#隐藏的定义C#重载:同一个
2023-06-17

java和c++的区别有哪些

这篇文章主要介绍java和c++的区别有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!区别:Java不可以将一个非布尔值当做布尔值在逻辑表达式中使用,C++却可以。C++引入了操作符重载机制,Java不支持。C+
2023-06-14

c#和java的区别有哪些

Java和C#都是编程的语言,它们是两个不同方向的两种语言。相同点:他们都是面向对象的语言,也就是说,它们都能实现面向对象的思想(封装、继承、多态)。区别:1.c#中的命名空间是namespace类似于Java中的package(包),在Java中导入包用im
c#和java的区别有哪些
2021-05-04

c++ primer和plus的区别有哪些

C++ Primer和C++ Primer Plus是两本不同的C++教程书籍。下面是它们之间的一些区别:1. 作者:C++ Primer的作者是Stanley B. Lippman, Josée Lajoie和Barbara E. Moo
2023-10-08

c语言中abs()和fabs()的区别有哪些

这篇“c语言中abs()和fabs()的区别有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“c语言中abs()和fabs
2023-06-17

C++中指针与引用的区别有哪些

这篇文章主要介绍C++中指针与引用的区别有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1、指针的声明上文中提到,指针和其所指向的变量就像硬币的两面,因此通过取址符号"&"我们可以找到变量的地址,通过解引用符号"
2023-06-20

C语言中scanf和printf的区别有哪些

这篇文章将为大家详细讲解有关C语言中scanf和printf的区别有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。区别:scanf是输入函数,用于从标准输入设备(一般是键盘)输入数据;而printf是
2023-06-14

c语言中*p和p的区别有哪些

这篇文章主要讲解了“c语言中*p和p的区别有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“c语言中*p和p的区别有哪些”吧!区别:1、表示的含义不同,“*p”表示此指针指向的内存地址中存
2023-07-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录