当前位置: 首页 > news >正文

C#中Override与New关键字的运用及实例解析

文章目录

    • override 关键字
    • new 关键字
    • 使用场景
    • 使用注意事项和最佳实践
    • 总结

在这里插入图片描述


在C#编程中,override 和 new 关键字用于处理类的继承和方法的重写。理解它们的用法和区别对于编写清晰和高效的面向对象代码至关重要。本文将详细阐述这两个关键字的含义、使用场景,并提供具体示例来帮助读者更好地理解它们在C#中的作用。

override 关键字

含义
override 关键字用于在派生类中重写基类中已经标记为 virtual 或 abstract 的方法、属性或索引器。通过使用 override,你可以提供一个具体的实现来替代基类的默认实现。这允许你在继承层次结构中定义不同的行为,同时保留方法签名的一致性。

使用场景
多态性:当你希望通过基类引用调用派生类中的方法时,使用 override 关键字。这是实现多态的基础。
基类成员标记:基类中的方法、属性或索引器必须被标记为 virtual 或 abstract 才能在派生类中使用 override。
示例

using System;public class Animal
{// 基类中的虚方法public virtual void MakeSound(){Console.WriteLine("Animal makes a sound.");}
}public class Dog : Animal
{// 重写基类中的虚方法public override void MakeSound(){Console.WriteLine("Dog barks.");}
}public class Program
{public static void Main(){Animal myDog = new Dog();myDog.MakeSound();  // 输出: Dog barks.}
}

解释
在上面的示例中:

  1. Animal 类中的 MakeSound 方法被标记为 virtual,允许在派生类中重写。
  2. Dog 类重写了 MakeSound 方法,提供了一个新的实现。
  3. 通过 Animal 类型的引用 myDog 调用 MakeSound 方法时,实际执行的是 Dog 类中的实现,这显示了多态的特性。

new 关键字

含义
new 关键字用于在派生类中隐藏基类中的成员(方法、属性或字段)。这不是对基类成员的重写,而是创建一个新的成员。这种隐藏关系不会影响基类的行为,且隐藏的成员不会参与多态性。

使用场景

隐藏基类成员:当你在派生类中需要一个新的实现,而不影响基类的实现时,使用 new 关键字。
不需要多态性:当你不打算通过基类引用访问派生类中的成员时,使用 new。
示例

using System;public class Parent
{public void Show(){Console.WriteLine("Parent Show");}
}public class Child : Parent
{// 使用 new 关键字隐藏基类中的方法public new void Show(){Console.WriteLine("Child Show");}
}public class Program
{public static void Main(){Parent parent = new Parent();Parent childAsParent = new Child();Child child = new Child();parent.Show();             // 输出: Parent ShowchildAsParent.Show();     // 输出: Parent Showchild.Show();             // 输出: Child Show}
}

解释
在上面的示例中:

  1. Parent 类中的 Show 方法在 Child 类中被隐藏。
  2. Child 类中的 Show 方法使用了 new 关键字,因此 Parent 类的 Show 方法仍然存在。
  3. 通过 Parent 类型的引用 childAsParent 调用 Show 方法时,调用的是 Parent 类中的实现,而不是 Child 类中的实现。这表明 new 关键字不会影响多态性。

使用注意事项和最佳实践

1. 选择 override 时:

  • 确保基类中的成员方法、属性或索引器被标记为 virtual 或 abstract。
  • 使用 override 实现多态性,允许通过基类引用调用派生类的实现。

2. 选择 new 时:

  • 了解 new 关键字隐藏了基类中的成员,不会参与多态性。
  • 使用 new 时,基类和派生类中的成员是两个不同的成员,调用哪个实现取决于引用的类型。

3. 避免混淆:

  • 在同一个类中使用 override 和 new 关键字可能会导致代码阅读困难。明确你需* 要的行为,以选择适当的关键字。

4. 检查警告:

  • 编译器会在使用 new 关键字隐藏基类成员时发出警告。审视这些警告并决定是否需要隐藏基类成员,避免潜在的错误。

总结

override 和 new 是 C# 中处理继承和多态性的关键字。使用 override 可以重写基类中的虚方法,实现多态性,使得运行时能够调用到派生类的实现。而使用 new 则隐藏基类中的成员,创建新的实现,这种隐藏不会影响基类的行为,也不参与多态性。理解这两个关键字的区别和适用场景对于编写健壮和可维护的代码至关重要。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • c# 什么是扩展方法
  • Oracle-OracleConnector
  • Linux应用层开发(7):网络编程
  • html+css+js网页设计 找法网2个页面(带js)ui还原度百分之90
  • C语言实现UDP广播
  • 力扣227题基本计算器II(Python实现)
  • Kali Linux——网络安全的瑞士军刀
  • 登录页滑块验证图
  • Windows下编译安装PETSc
  • 简单介绍BTC的Layer2项目RGB
  • Java面试篇(JVM相关专题)
  • C#使用NPOI进行Excel和Word文件处理(二)
  • 房产中介小程序
  • C语言——结构体与共用体
  • Docker 网络代理配置及防火墙设置指南
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • 10个最佳ES6特性 ES7与ES8的特性
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • docker python 配置
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • javascript 哈希表
  • nginx 配置多 域名 + 多 https
  • opencv python Meanshift 和 Camshift
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • Xmanager 远程桌面 CentOS 7
  • 编写高质量JavaScript代码之并发
  • 从PHP迁移至Golang - 基础篇
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 码农张的Bug人生 - 见面之礼
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 深入浅出Node.js
  • 自动记录MySQL慢查询快照脚本
  • 走向全栈之MongoDB的使用
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • 函数计算新功能-----支持C#函数
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • # dbt source dbt source freshness命令详解
  • # 利刃出鞘_Tomcat 核心原理解析(二)
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • #微信小程序:微信小程序常见的配置传值
  • (007)XHTML文档之标题——h1~h6
  • (10)STL算法之搜索(二) 二分查找
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (汇总)os模块以及shutil模块对文件的操作
  • (七)Appdesigner-初步入门及常用组件的使用方法说明
  • (算法)Travel Information Center
  • (转)创业的注意事项
  • (转)原始图像数据和PDF中的图像数据
  • (转载)Linux网络编程入门
  • ****三次握手和四次挥手
  • .NET DevOps 接入指南 | 1. GitLab 安装
  • .Net Memory Profiler的使用举例
  • .NET WebClient 类下载部分文件会错误?可能是解压缩的锅