c# 相对底层的认识

学习c++之后,重新认识下c#,发现好理解 多 了 。记录 下 。

 1在内存中的存放

值类型在栈中,

引用类型在堆中(new 对于值类型只是一个障眼法)。

2.参数的传递内存本质

值类型,   按位copy传递,值类型本身包含数据,所以按位copy,等于copy传递了数据本省的副本。
引用类型,按位copy传递,但是引用类型本身是指针,所以按位copy,等于copy传递了一个地址而已。

3.参数的ref .out 语法糖

类型 本质 具体表现 c++的同等表示  
无修饰   (Class a) 指针(如果是值类型,就是指本身) 修改数据会导致外部的变化,但是不能修改指针本身  ClassA*  
ref  (ref Class a) 指针的指针(如果是值类型就是值的指针) 既可以修改数据,也可以修改指针 ClassA**  
out(out class a) null指针的指针 (进:强制空,出:强制赋值) 主要是表示必须给一个新对象的指针给外部,用于多返回值问题。    

 

 

 

 

 

 

out:函数外不需要先创建对象,再 传参数 。因为函数内部 ,一定 会赋值。 如果非要创建,那就不需要额外的out 说明了 。

 

3.内存的释放

using 语句中使用的对象必须实现 IDisposable 接口,当离开作用范围,会自动执行dispose。

 

 

原文地址:https://www.cnblogs.com/lsfv/p/6699020.html