c#

位置:IT落伍者 >> c# >> 浏览文章

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


发布日期:2021年10月28日
 
正确理解C#中的ref关键字(续)[1]

前几天写了一篇介绍 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#中引用类型的对象都是由系统来管理的;如果再允许我们用指针来指来指去的整个程序非得乱套了不可!

[] []

               

上一篇:正确理解C#中的ref关键字(续)[2]

下一篇:一个用C#过滤HTML代码的函数