知识大全 正确理解C#中的ref关键字(续)[1]

Posted 变量

篇首语:无名,天地之始;有名,万物之母。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 正确理解C#中的ref关键字(续)[1]相关的知识,希望对你有一定的参考价值。

正确理解C#中的ref关键字(续)[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

前几天写了一篇介绍 ref 使用方法的文章 正确理解 C# 中的 ref 关键字 用于帮助大家加深对 ref 使用方法的了解 看来还是有部分兄弟姐妹没有完全搞明白:( 那我就再加上一篇 讲述得清楚一些 有不对的地方请指出 大家共同提供 呵呵

 

C# 中的变量

 

依据网上的一些文章介绍 要了解 C# 对内存的处理 首先要了解 C# 中的变量 以及变量的值是什么 在 C# 中 一个变量仅仅用于连接一个名称(这个名称当然就是变量名了 我们在代码中用到的)和一小块内存 一个变量有它的值 也就是这小块内存中存储的值 至于这小块内存的大小 以及如何解释其中存储的数据 则是和变量的类型(值类型和引用类型)相关的;这也就是值类型和引用类型的区别所在

 

一个引用类型的变量的值永远是 null 或者一个引用 如果是引用 则它一定会指向一个相对应的对象实例 比如 一个申明为 Stream s 的变量一定会是 null 或者指向一个 Stream 类的实例(当然也可能是 FileStream MemoryStream 等子类的实例) 而这个变量的大小则永远是一个引用所需的大小 和其指向实例的大小是没有关系的 在位系统上 引用的大小是个字节

 

而值类型则不同!一个值类型变量的值(所对应内存块中存储的数据)则永远是其对应实例的值 比如 我们定义了一个 struct

 

  public struct MyStruct

  

   public int a;

   public int b;

  

MyStruct m = new MyStruct();

 

在这里 变量 m 的值则是两个整数 而不是一个指向两个整数的引用 其内存中的存储的数据大小也就是个字节 而不是引用所需的个字节了

 

  讲到这里 大家也就会明白为什么值类型是按值传递(copy整个对象中的数据 对新对象数据的修改是不会影响到原对象的) 而引用类型是按引用传递(仅仅 copy 的是引用暂时可以把它当作内存地址吧)!而不仅仅是看它们各自的名称 呵呵 在 C# 中 值类型因为都是按值传递 所以也就不存在对象生命周期 引用计数啊什么的 在 unsafe 的情况下 我们甚至还可以像 C++ 中的那样申明值类型的指针!但是对于引用类型 这确是不行的 我想 C#中 引用类型的对象都是由系统来管理的;如果再允许我们用指针来指来指去的 整个程序非得乱套了不可!

[ ]  [ ]  

cha138/Article/program/net/201311/15016

相关参考