C# ReadOnlyRef Out
C# ReadOnly
- ReadOnly
- 先看两种情况
- 1.值类型
- 2.引用类型
- 结论
- Ref Out
ReadOnly官方文档
ReadOnly
先看两种情况
1.值类型
当数据是值类型时,标记为Readonly时,如果再次设置值,会提示报错,无法分配到只读字段
public class A
{private readonly int x;public A(int x){this.x = x;//在构造函数里,可以多次赋值,但是出了构造函数,值类型就无法变更了。this.x = x*2;}public void TryToUpdateInt(){//报错,无法分配到只读字段x = 4;}
}

2.引用类型
这里成功给引用类型赋值
public class RefOut
{ private readonly Dictionary<string, int> myDictionary = new Dictionary<string, int>();public RefOut(){// 添加键值对myDictionary.Add("One", 1);myDictionary.Add("Two", 2);}public void TryToAddKeyValuePair(){//这里没有报错,运行程序myDictionary.Add("Three", 3);}
}

结论
ReadOnly的可读是限定变量的地址不发生改变,与变量赋的值无关。
在构造函数里,可以多次赋值,但是出了构造函数,值类型就无法变更了。
值类型,因为值类型int a = 2,每次重新赋值a的地址变了,是重新拷贝一份,会变成一个新的地址,变量的地址发生了变化。所以不能重新设置值类型的值。这里是因为值类型的每次重新赋值,地址改变,所以宏观表现为,设置了ReadOnly,就无法再改变数据了。
引用类型,因为引用类型的 List<·RefOut·> a = new List<·RefOut·> (); 当给集合添加或者删除数据时,只是new List<·RefOut·> ()的数据发生了变化,变量a代表的地址并没有进行改变。所以引用类型,即使设置了Readonly也可以重新赋值。可以更改为ReadOnlyCollection<
T> 实现真正意义上的只读。
官方文档原话

Ref Out
用途:在将值类型传入方法时,如果改变,希望方法外的数据也会改变。
Ref Out 可以类比为C++中的指针。在C#中传参的值类型int a = 0在方法中修改a= 3,是不会改变外部的参数值,所以还是a=0。如果设置了ref或者Out参数则能改变a的值,变成a=3。
ref的参数必须有初始化值
out的初始化工作必须在方法中进行
RefOut a = new();
a.test(6, out int test01);
//ref必须在外部初始化完成
int test02 = 2;
a.test1(7, ref test02);
public class RefOut
{public void test(int b,out int a){//out必须在内部赋值a = 2;a = b+a;Console.WriteLine(a);}public void test1(int b ,ref int a){a = b*a;Console.WriteLine(a);}
}

相关文章:
C# ReadOnlyRef Out
C# ReadOnly ReadOnly先看两种情况1.值类型2.引用类型 结论 Ref Out ReadOnly官方文档 ReadOnly 先看两种情况 1.值类型 当数据是值类型时,标记为Readonly时,如果再次设置值,会提示报错,无法分配到只读字段 public class A {pri…...
linux 服务 下 redis 安装和 启动
官网下载 https://redis.io/download/ 安装步骤: 1.安装redis 所需要的依赖 yum install -y gcc tcl2.上传安装包并解压,下载安装包,上传到/usr/local/src目录,解压 tar -zxvf redis-7.2.3.tat.gz进入安装目录,运行…...
ECharts与Excel的结合实战
引言:本文是一篇ECharts和Excel实战的记录。将Excel与ECharts产生火花,从Excel读取数据然后在ECharts上展示。 1.柱状图前端代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title…...
UDP的特点及应用场景
目录 UDP特点 应用场景 总结 User Datagram Protocol(UDP,用户数据报协议)是互联网协议套件中的一种传输层协议。与TCP不同,UDP是一种无连接的、不可靠的协议。 UDP特点 要知道UDP可以用来做什么,首先我们要知道它…...
Python开发——工具篇 Pycharm的相关配置,Python相关操作 持续更新
前言 本篇博客是python开发的工具篇相关,介绍pycharm的使用和相关配置,收录python的相关操作,比如如何启动jupyter。 目录 前言引出Pycharmpycharm如何不同等级日志显示不同颜色设置不同pycharm的python环境 Python操作如何启动Jupyter 总结…...
【深度学习】卷积神经网络结构组成与解释
卷积神经网络是以卷积层为主的深度网路结构,网络结构包括有卷积层、激活层、BN层、池化层、FC层、损失层等。卷积操作是对图像和滤波矩阵做内积(元素相乘再求和)的操作。 1. 卷积层 常见的卷积操作如下: 卷积操作解释图解标准卷…...
从源码解析Containerd容器启动流程
从源码解析Containerd容器启动流程 本文从源码的角度分析containerd容器启动流程以及相关功能的实现。 本篇containerd版本为v1.7.9。 更多文章访问 https://www.cyisme.top 本文从ctr run命令出发,分析containerd的容器启动流程。 ctr命令 查看文件cmd/ctr/comman…...
引迈-JNPF低代码项目技术栈介绍
从 2014 开始研发低代码前端渲染,到 2018 年开始研发后端低代码数据模型,发布了JNPF开发平台。 谨以此文针对 JNPF-JAVA-Cloud微服务 进行相关技术栈展示: 1. 项目前后端分离 前端采用Vue.js,这是一种流行的前端JavaScript框架&a…...
如何处理枚举类型(下)
作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO 联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬 上一篇我们通过编写MyB…...
wsj0数据集原始文件.wv1.wv2转换成wav文件
文章目录 准备一、获取WSJO数据集二、安装sph2pipe三、转换代码四、结果展示 最近做语音分离实验需要用到wsj0-2mix数据集,但是从李宏毅语音分离教程里面获取的wsj0-2mix只有一部分。从网上获取到了完整的WSJO数据集后,由于原始的语音文件后缀是wv1或…...
Flask Session 登录认证模块
Flask 框架提供了强大的 Session 模块组件,为 Web 应用实现用户注册与登录系统提供了方便的机制。结合 Flask-WTF 表单组件,我们能够轻松地设计出用户友好且具备美观界面的注册和登录页面,使这一功能能够直接应用到我们的项目中。本文将深入探…...
【运维】hive 高可用详解: Hive MetaStore HA、hive server HA原理详解;hive高可用实现
文章目录 一. hive高可用原理说明1. Hive MetaStore HA2. hive server HA 二. hive高可用实现1. 配置2. beeline链接测试3. zookeeper相关操作 一. hive高可用原理说明 1. Hive MetaStore HA Hive元数据存储在MetaStore中,包括表的定义、分区、表的属性等信息。 hi…...
C#开发的OpenRA游戏之属性SelectionDecorations(13)
C#开发的OpenRA游戏之属性SelectionDecorations(13) 在前面分析SelectionDecorations属性类时,会发现它有下面这个属性: public class SelectionDecorations : SelectionDecorationsBase, IRender { readonly Interactable interactable; 它是定义了一个Interactabl…...
接手了一个外包开发的项目,我感觉我的头快要裂开了~
嗨,大家好,我是飘渺。 最近,我和小伙伴一起接手了一个由外包团队开发的微服务项目,这个项目采用了当前流行的Spring Cloud Alibaba微服务架构,并且是基于一个“大名鼎鼎”的微服务开源脚手架(附带着模块代…...
git常规使用方法,常规命令
Git是一种分布式版本控制系统,它可以记录软件的历史版本,并提供了多人协作开发、版本回退等功能。以下是Git的基本使用方法: 安装Git:下载安装包并进行安装,安装完成后在命令行中输入 git --version 进行验证。 初始化…...
【JavaScript】3.3 JavaScript工具和库
文章目录 1. 包管理器2. 构建工具3. 测试框架4. JavaScript 库总结 在你的 JavaScript 开发之旅中,会遇到许多工具和库。这些工具和库可以帮助你更有效地编写和管理代码,提高工作效率。在本章节中,我们将探讨一些常见的 JavaScript 工具和库&…...
开发基于 ChatGPT 分析热点事件并生成文章的网站应用【热点问天】把百度等热点用chatGPT来对热点事件分析海量发文章 开发步骤 多种方式获取利润
这样做的优点: 1.不用每个人都问chatGPT同样的问题。 2.已经生成的,反应快速。 3.内容分析的客观,真实,基于数据,无法造假。 4.无其它目的这种基于 ChatGPT 分析热点事件并生成文章的网站,可以通过多种方式…...
龙迅LT8668SXC适用于TPYE-C/DP/HDMI转EDP/VBO同时环出一路HDMI/DP,支持分辨率缩放功能。
1.描述 应用功能:LT8668SXC适用于TYPE-C/DP1.4/HDMI2.1转EDP/VBO同时环出一路HDMI/DP应用方案 分辨率:高达8K30HZ, 工作温度范围:−40C to 85C 产品封装:QFN88 (10*10)最小包装数:1680pcs 2.产品应用 •视频…...
跳板机原理
跳板机原理 跳板机(Jump Server)是一种网络安全设备或计算机,用于管理和保护内部网络中的其他计算机或系统。跳板机通常位于内部网络和外部网络之间,充当连接这两个网络的中间节点或跳板。以下是跳板机的主要功能和用途࿱…...
璞华大数据产品入选中国信通院“铸基计划”
武汉璞华大数据技术有限公司HawkEye设备数字化管理平台产品,凭借优秀的产品技术能力,通过评估后,入选中国信通院“铸基计划”《高质量数字化转型产品及服务全景图(2023)》的工业数字化领域。 “铸基计划”是中国信通院…...
.NET 9容器化避坑清单,12个导致K8s滚动更新失败的隐藏陷阱及修复代码
第一章:.NET 9容器化部署的核心演进与K8s适配全景 .NET 9标志着微软在云原生交付范式上的关键跃迁——其运行时、SDK与基础镜像深度重构,为容器化场景注入原生优化能力。与以往版本相比,.NET 9默认启用AOT(Ahead-of-Timeÿ…...
靠两台电脑,月入10万,一个中年人的实战分享
阿阳到底是谁?凭什么能做到 月入10万 ?先跟大家说个实话啊,我不是什么大牛,也没啥 光 环。我就是个普通人,普通的家庭,普通的脑子,普通的起点。唯一不普通的,可能就是——我辞职得比…...
造相-Z-Image-Turbo提示词自动化:使用JavaScript开发动态提示词生成器
造相-Z-Image-Turbo提示词自动化:使用JavaScript开发动态提示词生成器 你是不是也遇到过这样的烦恼?想用AI画一张特定风格的人像,比如“一个戴着贝雷帽、有着金色卷发、微笑的少女,背景是巴黎街头”,结果在提示词框里…...
别再让Pandas数据在Pycharm里‘隐身’了!一个设置搞定DataFrame显示不全
彻底解决Pandas DataFrame在PyCharm中的显示难题:从原理到实战 刚接触数据分析的朋友们,你们是否经常在PyCharm中遇到这样的困扰:当你满怀期待地打印出一个DataFrame,准备仔细查看数据时,却发现屏幕上布满了恼人的省略…...
告别环境冲突:在Anaconda中为PyTorch创建独立的Python 3.10 + CUDA 12.1虚拟环境
深度隔离:用Anaconda构建PyTorchCUDA开发环境的工程化实践 在深度学习项目开发中,环境管理往往是最容易被忽视却最关键的一环。想象一下这样的场景:你正在开发一个基于Transformer的NLP模型,突然需要切换到另一个使用不同CUDA版本…...
NPJ Precis Oncol 重庆大学附属肿瘤医院张久权教授团队:基于纵向MRI的分形分析预测乳腺癌新辅助化疗反应
01文献学习今天分享的文献是由重庆大学附属肿瘤医院张久权教授等团队于12月12日在肿瘤学顶刊《npj Precision Oncology》(中科院1区top,IF8)上发表的研究“Fractal analysis of longitudinal MRI for predicting response to neoadjuvant che…...
STM32 UART 通信详解
通用异步收发传输器(UART)是STM32微控制器中最基础、最常用的串行通信接口之一。它通过简单的两根信号线(TX和RX)实现全双工异步数据交换,广泛应用于与PC调试、传感器模块、蓝牙/Wi-Fi模块等的通信。一、UART协议基础1…...
Linux服务器上Jupyter Notebook的完整配置指南:从安装到开机自启动
Linux服务器Jupyter Notebook企业级部署全攻略:安全、稳定与自动化实践 在数据科学与机器学习领域,Jupyter Notebook已成为不可或缺的交互式开发环境。对于企业级应用而言,如何在Linux服务器上搭建一个安全稳定、支持多用户协作且能长期运行…...
三步掌握FullCalendar Vue3组件:从入门到场景化落地
三步掌握FullCalendar Vue3组件:从入门到场景化落地 【免费下载链接】fullcalendar-vue The official Vue 3 component for FullCalendar 项目地址: https://gitcode.com/gh_mirrors/fu/fullcalendar-vue 📌 适用人群:前端开发者/全栈…...
终极Windows驱动清理指南:DriverStore Explorer轻松释放20GB磁盘空间
终极Windows驱动清理指南:DriverStore Explorer轻松释放20GB磁盘空间 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 你是否发现Windows系统盘空间越来越少,却不…...
