再聊一次值类型和引用类型

C#值类型,作为函数形参,形参被修改,不影响原值。

这是我们在初始学习编程时需要记住的内容,我们也是一直这样践行的。

先说结论:这是不准确的。


为什么提出这样看似很浅显的问题,是因为有次我在使用ArraySegment<byte>值类型时,有感而发。

这是一个托管的值类型,表示array的一个片断, 在用做websocket接收数据的载体时我发现每次值传递后, 这个ArraySegment<byte>貌似发生了变化。这勾起了我的探究欲。

我们做一个简单的实验, 来证明【值类型作为函数形参, 形参被修改,不影响原值】不准确。

struct Slice {public Array Array { get; set; }public int Offset { get; set; }public int Count { get; set; }}class Program{static void Main(string[] args){var slice = new Slice { Array = Array.CreateInstance(typeof(int), 5)};Test(slice);foreach(var i  in slice.Array){Console.WriteLine(i); }Console.ReadLine();}// 值类型传参,值传给tmp变量static void Test(Slice tmp){tmp.Array.SetValue(1,1);tmp.Offset = 1;tmp.Count = 1;}}// 输出  0 1 0 0 0
slice变量的引用类型属性体现了变化,值类型Offset Count属性不会变化。

这个简单的Demo告诉我们:

大部分情况下:“值类型作为函数形参,形参被修改,不影响原值”, 但是如果修改的是值类型的引用类型字段,原值类型照样能体现修改。

归根到底由值类型和引用类型的特性决定:

值类型的变量直接存储数据,而引用类型的变量持有的是数据的引用,数据存储在数据堆中;

宽泛地讲:函数传参,都是值传递(拷贝), 只是引用类型传递的是原对象的引用或地址值。

本篇文章没啥干货,算是日常小记吧,各大佬轻喷。

基础不牢 地动山摇

  面试官:实现一个带值变更通知能力的Dictionary

 你管这叫"线程安全"?

 ASP.NET Core端点路由中三种让人困惑的路由函数

 你怕是对MD5算法有误解

 String是一个奇怪的引用类型

 难缠的布隆过滤器,这次终于通透了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/298994.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java+字节码工具64位_jclasslib 下载-jclasslib 32位64位(java字节码查看工具) 5.1 官方版 - 河东下载站...

jclasslib是款免费的开源java字节码的查看工具&#xff1b;它支持进行查看您需要进行使用汉字运用到的Java字节码&#xff0c;并且还拥有一个的类库来让开发者进行读取&#xff0c;包括了修改、对JavaClass文件、字节码的写入等&#xff1b;用户这进行使用的过程中&#xff0c;…

分组行号

怎样对分组里的行加上序号&#xff0c;要求每个组里行的序号从1开始&#xff01; --------------------------------------------------------------- 用计算域&#xff0c;放在明细区&#xff1a; getrow() - first(getrow() for group 1) 1 ---…

ado filter 多条记录_注意!武汉江南中心绿道武九线综合管廊工程开工,青山区多条道路通行规则有变...

楚天都市报10月29日(记者吴昌华 通讯员 李佳 陈菲)今日记者从武汉交管部门获悉&#xff0c;本周六&#xff0c;10月31日&#xff0c;武汉市江南中心绿道武九线综合管廊工程开始施工&#xff0c;青山区多条道路通行规则有变&#xff0c;部分道路禁止通行。交管部门提供详细绕行建…

深度学习框架再次升级,它们都有什么优点?

全世界只有3.14 % 的人关注了爆炸吧知识经过几年的发展&#xff0c;深度学习方法摧枯拉朽般地超越了传统方法&#xff0c;成为人工智能领域最热门的技术。之后&#xff0c;谷歌、亚马逊、百度、Facebook 纷纷开源了自己的深度学习框架。而支撑AlphaGo的核心技术架构--TensorFlo…

SQL Server 2005的安装,SQL Server 2005系列之一

最近复习SQL Server 2005,忽然有了写系列的打算&#xff0c;也不知道能不能写好&#xff0c;今天先写一篇关于SQL Server 2005的安装的博文吧。和往常一样&#xff0c;我们先来看看SQL Server 2005到底是个什么东西&#xff1f;SQL Server 2005是一种以高性能、高可靠性和可用性…

java iter是否存在_Java中ListIterator和Iterator的区别以及ListIterator的应用

Java中ListIterator和Iterator详解与辨析 在使用java集合的时候&#xff0c;都需要使用Iterator。但是java集合中还有一个迭代器ListIterator,在使用List、ArrayList、LinkedList和Vector的时候可以使用。这两种迭代器有什么区别呢&#xff1f;下面我们详细分析。这里有一点需要…

Quartz - 作业调度框架-插件化开发

背景大部分业务都是基于定时的任务&#xff0c;特别适合使用quartz这类框架解决定时问题。具体quartz的使用&#xff0c;看官方文档就可以了。下面谈谈对quartz插件化的封装。我们使用quartz.plugin。然后在quartz_jobs.xml方法里面定义了schedule&#xff0c;其中灵活的地方在…

cgi备份还原和ghost有什么区别_手动GHOST还原重装系统详细教程

一键重装虽好&#xff0c;但也不是万能的。俗语说&#xff1a;治标不治本。也许你懂得用各种一键备份还原工具重装&#xff0c;但不一定懂得手动GHOST重装。为此&#xff0c;吻妻为大家分享一下如何手动GHOST还原重装系统&#xff0c;本教程步骤虽多&#xff0c;但很多都是点“…

图解一步步安装SharePoint Foundation 2010

图解一步步安装SharePoint Foundation 2010 下载后在Windows Server 2008 R2上进行安装安装产品必须的一些组件&#xff0c;比原来好多了不用自己一个个下了。同意许可&#xff0c;此产品为不收费版本&#xff0c;不用序列号了&#xff01;&#xff01;&#xff01;安装相关的…

MYSQ 查看 2 进制日志

方法 1&#xff1a; myqlbinlog filename; -----------------------------------------------------------------------------------------------------------------------------------------------

当身为老师的爸爸上课时......​

1 当身为老师的爸爸上课时......▼2 气氛突然微妙......▼3 隔壁的一家人都馋哭了&#xff01;▼4 结束疫情隔离的你▼5 WOW!AMAZING!▼6 女孩子喜欢帅哥是不分年龄的▼‍‍7 单身狗又做错了什么呢&#xff1f;▼你点的每个赞&#xff0c;我都认真当成了喜欢

七招挽回受损WORD文档

七招挽回受损WORD文档在你试图打开一个Word文档时&#xff0c;如果系统没有响应&#xff0c;那么可能的原因是该文档已经损坏。此时&#xff0c;请试试笔者以下所述方法&#xff0c;或许能够挽回你的全部或部分损失。一、自动恢复尚未保存的修改Word提供了“自动恢复”功能&…

yum php fpm5.6,CentOS 7 yum 安装php5.6

配置yum源追加CentOS 6.5的epel及remi源。# yum install epel-release# rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm以下是CentOS 7.0的源。# yum install epel-release# rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm使用…

Handler和HandlerThread

1.什么是Handler&#xff1f; SDK中关于Handler的说明例如以下&#xff1a; A Handler allows you to sendand process Messageand Runnable objects associated with a threads MessageQueue.Each Handler instance is associated with a single thread and that threadsmessa…

amos里CFA可行性辨别结果怎么看_论文用问卷调查法,数据分析怎么做?

论文问卷数据的分析&#xff0c;看起来简单&#xff0c;好像每个人都会做。但是做起来还真的有点难度。很多初次使用问卷调查方法的人大多以为&#xff0c;问卷数据分析嘛&#xff0c;无外乎对单选题做做频率分析&#xff0c;看看选择不同的选项的人占比有多少。对于评分题目&a…

转:asp.net 负载平衡-Session相关

来自&#xff1a;http://www.cnblogs.com/zxylonely/archive/2009/12/23/1630197.htmlhttp://blog.csdn.net/lvlingwy/archive/2008/05/08/2418673.aspxhttp://bbs.ibeifeng.com/simple/index.php?t16926.html转自&#xff1a;http://sai5d.blog.sohu.com/131936651.html在WEB…

Hello Blazor:(10)按需加载JavaScript脚本

前言Blazor支持执行JavaScript脚本&#xff0c;通常是将脚本放在wwwroot/index.html(Blazor WebAssembly)或Pages/_Host.cshtml(Blazor Server)中。但是&#xff0c;这种方式会将所有JS方法用全局函数加载&#xff0c;即使某些方法只需要在特定组件中使用。既影响加载性能&…

只有学霸才懂的学习技巧,看完脑洞大开,绝对涨姿势!

▲ 点击查看法国生物学家乔治.居维叶曾说&#xff1a;“天才&#xff0c;首先是注意力。”事实上&#xff0c;除开那些逆天的天才之外&#xff0c;大部分人的智商&#xff0c;在先天因素的决定下&#xff0c;都是差不多的。但是专注力却可以因为后天的刻意训练&#xff0c;而有…

DOM Xerces类库使用方法

DOM Xerces类库使用方法Tuxedo中XML的历史  如 今随着XML逐渐成为主流的数据格式之一&#xff0c;自然而然地 Tuxedo将之作为一种基本缓冲类型予以支持。    Tuxedo 7.1 引入了XML缓冲类型&#xff0c;但迄今为止对于Tuxedo中的XML并无较多的论述。Tuxedo 7.1中并未携带真…

解析邻居的耳朵音乐地址(单页下载)

偶尔听歌的时候发现了一个很小众的音乐分享网站&#xff0c;邻居的耳朵&#xff0c;有个人的电台类型&#xff0c;属于音乐分享文字分享&#xff0c;觉得很不错。从域名来看&#xff0c;属于多米旗下的网站&#xff1a;http://ear.duomi.com/ 看来多米收购了很多这样的小站&am…