本博客不属于技术贴,主要是记录一些自己对不懂得地方的理解和学习的记录,请带着批判的眼光阅读~

值类型存储在栈上,引用类型存储在堆上。栈是由高到低存储的,遵循先进后出的原则,是内存提前分配好的区域,内存的释放不由人控制,用完后就会释放内存。堆是动态分配的内存区域,是无序的,受人为控制释放,但是达到一定内存存储点后,会由GC自动释放内存。

浅拷贝是不完全复制,只会复制顶级对象,对于值类型浅拷贝是完全复制,对于引用类型是拷贝的引用,不是拷贝引用的对象。深拷贝是完全复制,2个之间互不影响。
比如=就是浅拷贝,如果等号两边的变量都是值类型的,那么改变其中一个的值对另一个不会产生影响,但是如果两边是引用变量,则拷贝的是变量的引用关系,2个变量指向的是同一个对象实例,因此改变一个的内容,另一个也会改变。

参数传递默认是值传递(默认),就是属于浅拷贝,参数的改变与原值没关系。还有另外3中方法ref传递、out传递和params传递。
ref和out改变的是传递参数的方式,将原来的值传递改为引用传递,传递的是对参数变量本身的引用,因此传递的参数内容的改变会导致原值的改变
区别是ref要求在传递前要初始化赋值,在方法内部可以改变
 out不要求传递前赋值,但是必须在返回前进行赋值
都可以返回多个参数,都可以改变传递的参数的原值
params传递用在参数数目可变且类型一样是,传递的参数在传入方法时会被编译成数组的形式

对已声明的变量重新 new重新建一个实例,内存中新开一块区域,引用变量重新指向新实例,引用变量存储的是对该实例的引用的地址值
不加ref和out时:参数传递时类似于对该参数进行了浅拷贝,复制了一份,传递的参数和原值都是指向同一个实例,在方法内对该参数重新new新建实例时,参数指向改变,但是原值的指向不变,如果是在方法内对参数的内容进行改变,则原值同样改变,因为参数和原值是指向的同一个实例

C#参数传递、引用类型、值类型等的理解的更多相关文章

  1. [Clr via C#读书笔记]Cp5基元类型引用类型值类型

    Cp5基元类型引用类型值类型 基元类型 编译器直接支持的类型,基元类型直接映射到FCL中存在的类型. 作者希望使用FCL类型名称而避免使用关键字.他的理由是为了更加的清晰的知道自己写的类型是哪种.但是 ...

  2. JavaScript高级 面向对象(12)--引用类型值类型作为参数传递的特性

    说明(2017-4-2 18:27:11): 1. 作为函数的参数,就是将函数的数据拷贝一份,传递给函数的定义中的参数. 函数foo()在调用的时候,做了两件事: (1)函数在调用的时候,首先需要将参 ...

  3. NET中的引用类型和值类型 zt

    .NET中的类型分为值类型和引用类型,他们在内存布局,分配,相等性,赋值,存储以及一些其他的特性上有很多不同,这些不同将会直接影响到我们应用程序 的效率.本文视图对.NET 基础类型中的值类型和引用类 ...

  4. C# 值类型和引用类型

    一.基本概念 C#只有两种数据类型:值类型和引用类型 值类型在线程栈分配空间,引用类型在托管堆分配空间 值类型转为引用类型称成为装箱,引用类型转为值类型称为拆箱 以下是值类型和引用类型对照表 从上图可 ...

  5. CLR via C#(02)-基元类型、引用类型、值类型

    http://www.cnblogs.com/qq0827/p/3281150.html 一. 基元类型 编译器能够直接支持的数据类型叫做基元类型.例如int, string等.基元类型和.NET框架 ...

  6. .NET六大剑客:栈、堆、值类型、引用类型、装箱和拆箱

    .NET六大剑客:栈.堆.值类型.引用类型.装箱和拆箱 一.“堆”,“栈”专区 这两个字我相信大家太熟悉了,甚至于米饭是什么?不知道...“堆”,“栈”是什么?哦,这个知道... 之前我也写过一篇堆栈 ...

  7. [转] .NET中六个重要的概念:栈、堆、值类型、引用类型、装箱和拆箱

    为何要转载 一来是最近面试了几家公司,发现问的还都是这些的基础知识,二来是为了复习对.NET技术的基础拾遗达到温故知新的效果. 为什么有人说,不动笔不读书.我现在也是深有体会了,看过的东西不一定会记得 ...

  8. Swift - 值类型与引用类型的初步探究

    前言 swift中的结构体和类在组成和功能上具有一定的相似性.两者都可以含有成员属性.成员方法用于数据存储和功能性模块封装.往往造成不知如何对二者进行区分和使用 值类型概念和引用类型概念 值类型的概念 ...

  9. 【转】C#详解值类型和引用类型区别

    通用类型系统 值类型 引用类型 值类型和引用类型在内存中的部署 1 数组 2 类型嵌套 辨明值类型和引用类型的使用场合 5 值类型和引用类型的区别小结   首先,什么是值类型,什么是引用类型? 在C# ...

随机推荐

  1. ADO.NET DataReader和DataAdapter的区别

    SqlDataReader是一个向前的指针,本身并不包含数据,调用一次 Read() 方法它就向前到下一条记录,一个SqlDataReader必须单独占用一个打开的数据库连接. 在使用 SqlData ...

  2. jquery dataTable 入门

    step1:切记要先引入jquery <link rel="stylesheet" type="text/css" href="C:\Users ...

  3. Hadoop1.2.1伪分布模式安装指南

    一.前置条件 1.操作系统准备 (1)Linux可以用作开发平台及产品平台. (2)win32只可用作开发平台,且需要cygwin的支持. 2.安装jdk 1.6或以上 3.安装ssh,并配置免密码登 ...

  4. js页面加载进度条

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. 移动WEB开发常用技巧

    Meta设置 <!-- 设备宽度.禁止缩放 --> <meta name="viewport" content="width=device-width, ...

  6. 转载: js jquery 获取当前页面的url,获取frameset中指定的页面的url(有修改)

    转载网址:http://blog.csdn.net/bestlxm/article/details/6800077 js jquery 怎么获取当前页面的url,获取frameset中指定的页面的ur ...

  7. 记录android开发博客

    1.一国外android开发博客,值得关注 https://blog.stylingandroid.com/page/2/ 2.一个app设计博客,很赞 http://androidniceties. ...

  8. VS2010安装MSDN

    VS2010正式版不再有单独的MSDN Library安装选项,以至于很多同学找不到本地的MSDN Library来用,其实VS2010的ISO安装光盘里已经包含有MSDN Library,只不过要手 ...

  9. (转)syslog日志等级

    设施.优先级”(facility.priority)设施(facility): kern 0 内核日志消息 user 1 随机的用户日志消息 mail 2 邮件系统日志消息 daemon 3 系统守护 ...

  10. Could not open a connection to your authentication agent

    执行ssh-add ~/.ssh/rsa  就会遇到上述错误了 解决方案: 先执行  eval `ssh-agent`  (是-键上的那个`) 再执行 ssh-add ~/.ssh/rsa成功 ssh ...