值类型与引用类型

来源:互联网 发布:淘宝店铺介绍 编辑:程序博客网 时间:2024/06/04 18:11

值类型:MSDN的定义为:直接包含他们的数据,值类型的实例要么在堆栈上,要么内联在结构中。包括简单类型,结构体类型和枚举类型。

引用类型:MSDN的定义为:引用类型存储对值的内存地址的引用,位于堆上。包括用户定义的类,装箱的值类型和委托...

每个变量或者程序都有其堆栈,不同的变量不能共有同一个堆栈地址。

从上图可以看出:mystrut在堆栈中包含其实例数据,而myclass在堆栈中只是保存了其实例数据的引用地址,所以myclass变量的值的改变会影响另一个变量的值。

简单的结论:值类型实例总是分配在它生命的地方,例如声明在局部变量的时候被分配在堆栈上,声明为引用类型成员时(比如类的成员变量)会被分配到托管堆上;引用实例总是分配在托管堆上。

通用规则与比较:

1)使用IS.ValueType来判断一个类型是否为值类型(所有的值类型都继承自System.ValueType又继承自System.Object)[引用类型是直接继承System.Object]。

2)以操作符ref和out来标识值类型按引用方式传递,其分别是:ref在参数传递之前必须初始化;而out则在传递前不必初始化,但是在传递的时候必须显示赋值。

3)值类型与引用类型之间的转换过程成为装箱与拆箱。

4)sizeof()运算符用于获取值类型的大小

5)值类型也要用NEW操作符来完成初始化;而单纯的定义没有完成初始化动作,此时对成员的引用将不能通过编译。例如:

Mystruct  aTest;

Console.writeLine(aTest.X);



0 0
原创粉丝点击