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。