前言

数据在内存中,存在两种状态,堆和栈中。堆中的数据是可以直接拿到的,一般称引用对象。

这些对象有一个特征,那就是经过函数处理之后,这些数据在主线程中改变了。好奇点好了,为什么栈中的数据就不会改变呢?难道是没有计算?

其实计算机哪有这么聪明,不过是找了个替代者----形参。可以说就像古代上战场抓壮丁一样,总有些替代者,战场无论生死和原来没有去的那个人没有任何关系。

这就形成了一种特殊情况了,那么特殊情况下就拥有局限性,所以出现了ref和out。

正文

ref和out到底是啥?有什么区别。

区别:ref是传的的是地址。是地址那么就有地标和名称,比如说经度纬度定位到某个地方。

所以有一个规定就是ref必须赋值然后才能调用,为什么会有这个规定呢,或者说是不是必须有这个规定呢。

是的,必须的,很简单,如果一个地址没有对应到栈中的参数,它在赋值的时候就需要往堆中分配一个,而函数其实就是一个对象,会分配相应的堆区,这些区是会被释放的,所以任何修改没有任何意义。

out 是啥?out是这样的。就像一个门外汉,在外面等,等给他东西。为何out不能传值?假设out传递了值,那么他是这样的,在函数中创建了一个形参,并分配了一个栈,可以说是一个新的对象。这时候好像回到了原点。那么这个out是这样做的,out的确是分配了函数的栈,但是它不释放。

优点:两者都可以让传入函数的值类型得到改变。缺点:性能肯定是下降了。

对于string的优化

string有一种方式,叫做stringbuild,这个关键字是引用类型,可以解决一下string的问题,性能比ref和out好点。

c# ref和out 详解的更多相关文章

  1. C# 方法参数 out、ref、param 详解

    ref和out都对函数参数采用引用传递形式——不管是值类型参数还是引用类型参数,并且定义函数和调用函数时都必须显示生命该参数为 ref/out形式.两者都可以使函数传回多个结果. ref 类似于 PH ...

  2. C#中的out、ref、params详解

    out参数: 如果你在一个方法中,返回多个相同类型的值的时候,可以考虑返回一个数组.但是,如果返回多个不同类型的值的时候,返回数组就不行了,那么这个时候,我们可以考虑使用out参数.out参数就侧重于 ...

  3. Vue 获取dom元素之 ref 和 $refs 详解

    一.$refs 一个对象,持有ref注册过的所有元素或子组件.(注册过的 ref 的集合) 二.ref 被用来给元素或子组件注册引用信息.若用在dom元素上,引用指向的就是dom元素:若用在子组件上, ...

  4. atitit.mp4 视频文件多媒体格式结构详解

    atitit.mp4 视频文件多媒体格式结构详解 1. 一.基本概念1 2. MP4文件概述2 3. mp4是由一个个“box”组成的,2 4. 典型简化mp43 5. Fragments5 6. r ...

  5. out和ref详解

    要想充分理解C# out和ref,必须先明确如下两个概念(对值类型与引用类型掌握比较好的,可以跳过"一.明确两个基本概念") 一.明确两个基本概念 值类型: 定义:通过值的方式来传 ...

  6. ORACLE中RECORD、VARRAY、TABLE、IS REF CURSOR 的使用及实例详解

    ORACLE中RECORD.VARRAY.TAB.IS REF CURSOR LE的使用及实例详解 create or replaceprocedure PRO_RECORD_ROW_TAB_EXAM ...

  7. org.apache.log4j.Logger详解

    org.apache.log4j.Logger 详解 1. 概述 1.1. 背景 在应用程序中添加日志记录总的来说基于三个目的 :监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工 ...

  8. logback 常用配置详解<appender>

    logback 常用配置详解 <appender> <appender>: <appender>是<configuration>的子节点,是负责写日志的 ...

  9. Web.xml详解(转)

    这篇文章主要是综合网上关于web.xml的一些介绍,希望对大家有所帮助,也欢迎大家一起讨论. ---题记 一.            Web.xml详解: (一)  web.xml加载过程(步骤) 首 ...

  10. C#中的 特性 详解(转载)

    本篇幅转载于:http://www.cnblogs.com/rohelm/archive/2012/04/19/2456088.html C#中特性详解 特性提供了功能强大的方法,用于将元数据或声明信 ...

随机推荐

  1. Scriban语言手册中文版

    Scriban是一个快速.强大.安全且轻量级的模板引擎,同时兼容liquid语法规则. 项目地址:https://github.com/scriban/scriban 这个文档是语言语法的中文翻译 原 ...

  2. ANDROID : NEW IDEA

    •前言 学习了 Android 开发后,小脑袋瓜中时不时会蹦跶出一些想法: 这些想法大都是我现在实现不了的,所以就需要记录一下,等学到相关知识时,在着手解决. •NEW IDEA 1 将一款 APP( ...

  3. python AI应用开发编程实战 大模型实战基础(数据存储类型列表与字典)(二)

    大模型开发中,需要和自己的业务融合,我们要对自己的数据处理,熟悉外理excle  word  pdf 数据然后处理后可以放到向量数据库,或者直接Assistants API传到大模型引用,不管怎么样数 ...

  4. Base MYSQL Database create stored procedures resolve the Delimiter error

    Base MYSQL Database create stored procedures resolve the Delimiter error, It must be created using a ...

  5. Access注入-Cookie注入

    Access注入-Cookie注入 1.Cookie简单介绍 2.Cookie注入原理及方法 一.Cookie简单介绍 What is Cookie? 储存在用户本地终端上的数据 类型为"小 ...

  6. Java加密技术(五)——非对称加密算法的由来DH

    Java非对称加密算法dh     接下来我们分析DH加密算法,一种适基于密钥一致协议的加密算法. DH Diffie-Hellman算法(D-H算法),密钥一致协议.是由公开密钥密码体制的奠基人Di ...

  7. 博客调整为MarkDown和图床外链、配置Gitee作为图床

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明   本文作为本人csdn blog的主站的备份.(Bl ...

  8. 用phpStudy配置apache服务器

    一:下载phpStudy 1进入官网https://www.xp.cn/download.html 选择稳定的2018版本 2执行下载好的文件,选择下载地址 注意!这里的安装路径不能有中文 3亮两个绿 ...

  9. SnapHelper源码深度解析

    目录介绍 01.SnapHelper简单介绍 1.1 SnapHelper作用 1.2 SnapHelper类分析 1.3 LinearSnapHelper类分析 1.4 PagerSnapHelpe ...

  10. 使用 NocoDB 一键将各种数据库转换为智能表格

    NocoDB 是一款开源的无代码数据库平台,可以进行数据管理和应用开发.它的灵感来自 Airtable,支持与 Airtable 类似的电子表格式交互.关系型数据库 Schema 设计.API 自动生 ...