知识大全 正确理解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

相关参考

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

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

知识大全 正确理解C#中的关键字[2]

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

知识大全 正确理解C#中的关键字[3]

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

知识大全 全面分析C#方法中的ref和out

全面分析C#方法中的ref和out  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  ref&nbs

知识大全 .net程序员的盲点(一):ref,out ,params的区别

  C#中有三个关键字refoutparams虽然本人不喜欢这三个关键字因为它们疑似破坏面向对象特性但是既然m$把融入在c#体系中那么我们就来认识一下参数修饰符refoutparams吧还有它们的区别

知识大全 c#学习体会:使用 ref 和 out 传递数组

  c#学习体会:使用ref和out传递数组(downmoon)希望与大家分享与所有的out参数一样在使用数组类型的out参数前必须先为其赋值即必须由接受方为其赋值例如public stat

知识大全 c#中通过值和引用传递参数

  在C#中既可以通过值也可以通过引用传递参数通过引用传递参数允许函数成员(方法属性索引器运算符和构造函数)更改参数的值并保持该更改若要通过引用传递参数请使用ref或out关键字为简单起见本主题的示例

知识大全 理解C#中的代理和事件(一)

理解C#中的代理和事件(一)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  突然写这篇文章真的有

知识大全 c# static的全部用法收集整理

   static的全部用法   要理解static就必须要先理解另一个与之相对的关键字很多人可能都还不知道有这个关键字那就是auto其实我

知识大全 c#:static使用方法整理

  要理解static就必须要先理解另一个与之相对的关键字很多人可能都还不知道有这个关键字那就是auto其实我们通常声明的不用static修饰的变量都是auto的因为它是默认的就象short和long