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

C# new关键字作用

在C#中,当子类定义了与父类同名的字段或者方法时,可以使用new关键字进行隐藏。使用new和不使用new关键字的区别主要在于如何处理字段的隐藏和可访问性。

讲人话就是,假设父类的字段或方法,子类是可以直接访问的(public啊 protected啊这些访问级别)。两种情况:

1. 如果你不在子类定义同名的方法、字段,那么我们需要用到父类方法或者字段时,直接在子类用就好了,没有任何歧义!就是父类的东西,对不对!

2. 相反,如果你恰好在子类定义了一个同名的方法、字段(不加new),那么你在子类直接用他们的时候(不加base,加了base就是父类的了,这也是会容易产生错误的地方,也许你想用父类的,习惯性没加base,毕竟可以直接访问嘛,此时你可能忘了你在子类定义了同名的方法或字段,错误就此产生),你用的就是你在子类写的方法或字段(这就是所谓的会隐藏父类的方法或字段),他们可能会因为你的赋值或重写跟父类不一致,没问题吧?

此时呢,编译器比较友善,他会发出警告:你是否知道自己在干什么?你是不是不想用父类的方法或字段了?为了防止你犯错或者以后忘记了,编译器提醒你:大哥别怕麻烦,加个new标记一下,好让我知道你确实清楚自己在干什么!

不使用new关键字

当子类中定义了一个与父类同名的字段而不使用new关键字时,编译器会发出警告,指示你这个行为可能是不明确的,因为它会隐藏父类的字段。尽管编译器会允许这样做,但它认为这是一个潜在的编程错误。

class Parent
{public int number = 42;
}class Child : Parent
{public int number = 24; // No 'new' keyword, this hides the parent class's 'number'
}class Program
{static void Main(){Child child = new Child();Parent parent = child;Console.WriteLine(child.number); // Output: 24 (child's number)Console.WriteLine(parent.number); // Output: 42 (parent's number)}
}

在这种情况下,child.number访问的是子类的number字段,而parent.number访问的是父类的number字段。编译器会发出警告,提醒你子类的字段隐藏了父类的字段。

使用new关键字

当子类中定义了一个与父类同名的字段并使用new关键字时,表示你显式地隐藏了父类的字段。编译器不会发出警告,因为你已经明确了你的意图。

class Parent
{public int number = 42;
}class Child : Parent
{public new int number = 24; // 'new' keyword explicitly hides the parent class's 'number'
}class Program
{static void Main(){Child child = new Child();Parent parent = child;Console.WriteLine(child.number); // Output: 24 (child's number)Console.WriteLine(parent.number); // Output: 42 (parent's number)}
}

使用new关键字的行为和不使用new关键字的行为在运行时是相同的,但使用new关键字会使代码更清晰,并且不会触发编译器警告。

总结

  • 不使用new关键字:子类的字段隐藏父类的字段,编译器会发出警告。
  • 使用new关键字:子类显式隐藏父类的字段,编译器不会发出警告。

无论是否使用new关键字,访问字段时的行为是相同的。子类的实例直接访问子类的字段,通过父类引用访问父类的字段。

new用于方法作用跟字段类似。说白了用不用new本质上没有什么区别。用new的作用,第一消除编译器警告,第二语义上更加清晰明了。

相关文章:

C# new关键字作用

在C#中,当子类定义了与父类同名的字段或者方法时,可以使用new关键字进行隐藏。使用new和不使用new关键字的区别主要在于如何处理字段的隐藏和可访问性。 讲人话就是,假设父类的字段或方法,子类是可以直接访问的(publi…...

Python代码之特征工程基础

1. 什么是特征工程 特征工程是指从原始数据中提取、转换和创建适合于模型训练的数据特征的过程。它是机器学习和深度学习中非常重要的一步,因为好的特征工程可以显著提高模型的性能。特征工程涉及从数据中提取有意义的信息,并将其转换为模型可以理解和使…...

低代码平台:效率利器还是质量妥协?

目录 低代码平台:效率利器还是质量妥协? 一、引言 二、低代码平台的定义和背景 1、什么是低代码平台? 2、低代码平台的兴起 三、低代码开发的机遇 1、提高开发效率 2、降低开发成本 3、赋能业务人员 四、低代码开发的挑战 1、质量…...

大数据-Big Data

1. 简介 1.1. 主要特点 大数据(Big Data)是指规模巨大、复杂多变的数据集合,这些数据集来源于多个不同的源,包括社交媒体、移动设备、物联网、传感器等。大数据的主要特点如下: 数据量大(Volume):大数据的起始计量单位是PB(1024TB)、EB(1024PB,约100万TB)或ZB(…...

Redis的持久化的策略

Redis的持久化的策略 官方文档说明 AOF持久化策略RDB持久化的策略 AOF持久化策略 AOF持久性记录服务器接收到的每个写操作,然后,可以在服务器启动时再次重播这些操作,重建原始数据集,使用与Redis协议本身相同的格式记录命令。…...

【八】Zookeeper3.7.1集成Hadoop3.3.4集群安装

文章目录 1.基本原理2.下载并解压ZooKeeper3.配置环境变量4.配置ZooKeeper5.创建数据目录并初始化myid6.启动ZooKeeper7.配置ZooKeeper集成到Hadoop8.重启Hadoop9.ZooKeeper状态检查 1.基本原理 ZooKeeper 是一个分布式协调服务,用于分布式系统中管理配置信息、命名…...

【C/C++笔记】:易错难点3 (二叉树)

选择题 🌈eg1 一棵有15个节点的完全二叉树和一棵同样有15个节点的普通二叉树,叶子节点的个数最多会差多少个()? 正确答案: C A. 3 B. 5 C. 7 D. 9 解析:普通二叉树的叶子节…...

一篇文章解决Webpack

一:什么是webpack webpack是一个用于现代JavaScript应用程序的静态模块打包工具。本质是一个软件包, 静态模块包括以下:html、css、js、图片等固定内容的文件 二:webpack工作原理 当 webpack 处理应用程序时,它会在内…...

速盾:cdn如何解析php文件中的图片?

CDN(Content Delivery Network)是一种通过分布在全球各地的服务器来加速网络内容传输的技术。CDN通过将内容缓存在离用户最近的服务器上,提供更快的访问速度和更好的用户体验。在解析PHP文件中的图片时,CDN可以起到以下几个方面的…...

如何快速实现MODBUS TCP转Profinet——泗博网关EPN-330

泗博网关EPN-330可作为PROFINET从站,支持与西门子S7-200 SMART/300/400/1200/1500全系列PLC以及具有PROFINET主站的系统无缝对接,而Modbus TCP端,可以与Modbus TCP从站设备、主站PLC、DCS系统以及组态软件等进行数据交互。 通过EPN-330&…...

什么是实时数据仓库?它有哪些不可替代之处?

【实时数据仓库】可以分开来理解: ✅【实时数据】:即能够快速处理数据,且几乎无延迟的提供最新的数据的能力。 ✅【仓库管理】:可以理解为对仓库的库存控制、对仓库的存储优化以及协调物流。 那么实时数据仓库就是:…...

《Ubuntu22.04环境下的ROS2学习笔记1》

一、在ROS2环境下创建工作空间 ROS2相比ROS1来说工作空间的创建有较大的不同,同时工作空间中的四个目录被更换为src(存放源码) , build(存放编译的中间文件) , install(存放可执行文件) , log(日志)。同时命令行也有些许变化&…...

Jupyter nbextensions安装与使用

Jupyter nbextensions的安装与使用主要包括以下几个步骤: 一、安装步骤 确保已安装Jupyter Notebook 如果尚未安装Jupyter Notebook,可以使用pip命令进行安装: pip install jupyter 安装nbextensions 使用pip命令安装nbextensions包&#x…...

java.nio.charset.MalformedInputException: Input length = 1

1、问题 项目启动报错: Exception in thread "main" org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedInputException: Input length 1提示原因: Caused by: java.nio.charset.MalformedInputException: Input length 1…...

yarn的安装和配置使用

文章目录 一、前言二、yarn简介三、yarn的特点四、yarn安装五、配置yarn5.1 全局配置5.2 项目配置 五、使用yarn六、yarn常用命令七、版本管理 一、前言 Yarn是facebook发布的一款取代npm的包管理工具,本文给大家介绍yarn的安装和使用,最详细教程&#…...

JVM知识总结(即时编译)

文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 即时编译 Java编译器经过解释执行,其执行速度必然会比…...

【网络】TCP协议——TCP连接相关、TCP连接状态相关、TCP数据传输与控制相关、TCP数据处理和异常、基于TCP应用层协议

文章目录 Linux网络1. TCP协议1.1 TCP连接相关1.1.1 TCP协议段格式1.1.2 确定应答(ACK)机制1.1.3 超时重传机制 1.2 TCP连接状态相关1.2.1 TIME_WAIT状态1.2.2 CLOSE_WAIT 状态 1.3 TCP数据传输与控制相关1.3.1 滑动窗口1.3.2 流量控制1.3.3 拥塞控制1.3.4 延迟应答1.3.5 捎带应…...

一起看看JavaAgent到底是干啥用的

JavaAgent 简介 定义: JDK提供的一种能力,允许开发者在运行时对已有class代码进行注入和修改。用途: 增强和修改类执行,如IntelliJ IDEA使用JavaAgent增强JVM行为实现调试功能。 JavaAgent 工作原理 premain 方法: JavaAgent的入口点,接收…...

k8s工作负载控制器--DaemonSet

文章目录 一、概述二、适用场景三、基本操作1、官网的DaemonSet资源清单2、字段解释3、编写DaemonSet资源清单4、基于yaml创建DaemonSet5、注意点5.1、必须字段5.2、DaemonSet 对象的名称5.3、.spec.selector 与 .spec.template.metadata.labels之间的关系 6、查看DaemonSet6.1…...

探索Python文档自动化的奥秘:MkDocs的神奇之旅

文章目录 **探索Python文档自动化的奥秘:MkDocs的神奇之旅**第一部分:背景为什么选择MkDocs? 第二部分:MkDocs是什么?MkDocs:文档生成的瑞士军刀 第三部分:如何安装MkDocs?一键安装&…...

Cursor实现用excel数据填充word模版的方法

cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...

模型参数、模型存储精度、参数与显存

模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

淘宝扭蛋机小程序系统开发:打造互动性强的购物平台

淘宝扭蛋机小程序系统的开发,旨在打造一个互动性强的购物平台,让用户在购物的同时,能够享受到更多的乐趣和惊喜。 淘宝扭蛋机小程序系统拥有丰富的互动功能。用户可以通过虚拟摇杆操作扭蛋机,实现旋转、抽拉等动作,增…...

SQL Server 触发器调用存储过程实现发送 HTTP 请求

文章目录 需求分析解决第 1 步:前置条件,启用 OLE 自动化方式 1:使用 SQL 实现启用 OLE 自动化方式 2:Sql Server 2005启动OLE自动化方式 3:Sql Server 2008启动OLE自动化第 2 步:创建存储过程第 3 步:创建触发器扩展 - 如何调试?第 1 步:登录 SQL Server 2008第 2 步…...

stm32wle5 lpuart DMA数据不接收

配置波特率9600时,需要使用外部低速晶振...

恶补电源:1.电桥

一、元器件的选择 搜索并选择电桥,再multisim中选择FWB,就有各种型号的电桥: 电桥是用来干嘛的呢? 它是一个由四个二极管搭成的“桥梁”形状的电路,用来把交流电(AC)变成直流电(DC)。…...

Java中栈的多种实现类详解

Java中栈的多种实现类详解:Stack、LinkedList与ArrayDeque全方位对比 前言一、Stack类——Java最早的栈实现1.1 Stack类简介1.2 常用方法1.3 优缺点分析 二、LinkedList类——灵活的双端链表2.1 LinkedList类简介2.2 常用方法2.3 优缺点分析 三、ArrayDeque类——高…...