当前位置: 首页 > 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?一键安装&…...

深度解析TFTP与FTP:核心区别、工作原理与应用场景

深度解析TFTP与FTP:核心区别、工作原理与应用场景摘要一、基础定义1.1 FTP 协议1.2 TFTP 协议二、TFTP 和 FTP 核心区别(表格对比)三、工作原理简要说明FTP 原理TFTP 原理四、TFTP 应用场景(最典型)1. **网络设备配置备…...

mysql安装后忘记root密码如何找回_单用户模式重置密码方法

跳过权限验证启动MySQL是唯一可行入口;需用--skip-grant-tables绕过校验,再根据版本(5.7用UPDATEPASSWORD(),8.0用ALTER USER)改密并FLUSH PRIVILEGES,最后务必清除配置重启服务。跳过权限验证启动 MySQL 是…...

Java微服务容器化新范式:GraalVM静态镜像+Seccomp白名单+gVisor沙箱(三重隔离方案已通过CNCF安全审计)

第一章:Java微服务容器化新范式:GraalVM静态镜像Seccomp白名单gVisor沙箱(三重隔离方案已通过CNCF安全审计)现代Java微服务在云原生环境中正面临启动慢、内存高、攻击面广三大瓶颈。本章介绍的三重隔离方案,将GraalVM …...

APA第7版参考文献格式:Microsoft Word用户的终极解决方案

APA第7版参考文献格式:Microsoft Word用户的终极解决方案 【免费下载链接】APA-7th-Edition Microsoft Word XSD for generating APA 7th edition references 项目地址: https://gitcode.com/gh_mirrors/ap/APA-7th-Edition 你是否曾在深夜为论文参考文献格式…...

LFM2.5-1.2B-Thinking-GGUF效果对比:Thinking中间过程vs后处理终版答案差异

LFM2.5-1.2B-Thinking-GGUF效果对比:Thinking中间过程vs后处理终版答案差异 1. 模型概述 LFM2.5-1.2B-Thinking-GGUF是Liquid AI推出的轻量级文本生成模型,特别适合在资源受限的环境中快速部署和使用。该模型采用GGUF格式,通过内置的llama.…...

CogVideoX-2b效果探索:极端提示词下的边界测试

CogVideoX-2b效果探索:极端提示词下的边界测试 1. 引言:当文字遇见视频魔法 你有没有想过,用几句话就能拍出一部微电影?输入一段文字描述,几分钟后就能得到一段动态视频,这听起来像是科幻电影里的场景&am…...

智能语音转写效率工具:AsrTools解放你的音频处理工作流

智能语音转写效率工具:AsrTools解放你的音频处理工作流 【免费下载链接】AsrTools ✨ AsrTools: Smart Voice-to-Text Tool | Efficient Batch Processing | User-Friendly Interface | No GPU Required | Supports SRT/TXT Output | Turn your audio into accurate…...

StreamFab

链接:https://pan.quark.cn/s/10cd1ef07b17这是一款全球网站视频离线下载器...

革命性文件传输神器react-native-fetch-blob:告别BASE64性能瓶颈的终极指南

革命性文件传输神器react-native-fetch-blob:告别BASE64性能瓶颈的终极指南 【免费下载链接】react-native-fetch-blob A project committed to making file access and data transfer easier, efficient for React Native developers. 项目地址: https://gitcode…...

聚焦播放器全链路优化

播放器开发属于音视频领域中独立性强、技术壁垒高的方向。多线程调度各模块是避免任务堵塞、提高并发处理效率的关键。下面从全链路模块展开播放器性能优化与低延迟方案分析:采集模块。本地流指本地文件的读取或者是摄像头或者麦克风数据的读取。以RV1126摄像头为例…...