值类型与引用类型的区别.doc
上传人:sy****28 上传时间:2024-09-13 格式:DOC 页数:4 大小:24KB 金币:16 举报 版权申诉
预览加载中,请您耐心等待几秒...

值类型与引用类型的区别.doc

值类型与引用类型的区别.doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

16 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

.NET将数据类型分为值类型(valuetype)和引用类型(referencetype)值类型(引用类型(值类型)引用类型)一个具有值类型(valuetype)的数据存放在栈内的一个变量中。即是在栈中分配内存空间,直接存储所值类型(值类型)栈包含的值,其值就代表数据本身。值类型的数据具有较快的存取速度。一个具有引用类型(referencetype)的数据并不驻留在栈中,而是存储于堆中。即是在堆中分配内存空引用类型(堆引用类型)间,不直接存储所包含的值,而是指向所要存储的值,其值代表的是所指向的地址。当访问一个具有引用类型的数据时,需要到栈中检查变量的内容,该变量引用堆中的一个实际数据。引用类型的数据比值类型的数据具有更大的存储规模和较低的访问速度。C#是一种类型安全的语言。每一个变量都要求定义为一个特定的类型,并且要求存储在变量中的值只能是这种类型的值。变量既能保存值类型,也可以保存引用类型,还可以是指针。这一课将讲述前两种类型,关于指氲?讨论我们将在下一课中进行。下面是关于值类型和引用类型不同点的概论:如果一个变量v存储的是值类型,则它直接存储包含数据的对象。任何其他的变量v’都不能直接存储已经由v存储了的对象,虽然v’可以存储一个和v存储的对象有着相同值的对象。(译注:这意味着,v和v’存储的对象毫不相干,任意改变其中一个存储的对象都不会影响到另一个变量存储的对象。)如果变量v存储的是一个引用类型,它直接存储一个指向对象的引用,同时可能存在另一个变量v’,它也存储着指向这个对象的引用。(译注:这意味着,改变v’引用的对象同时也会影响到v引用的对象,反之亦然。)值类型在C#中你可以通过声明枚举类型或是结构类型来定义你自己的值类型。C#以同样的方式处理用户自定义的类型和C#预定义的值类型,不过C#编译器可能更优于处理后者。下面的表列出了C#中预定义的值类型的一些信息。因为在C#中所有的基本值类型都是从object类型(最终基类)发展而来,所以下表中还显示了与这些预定义类型相对应的.Net框架中的System类型。C#类型sbyteshortintlong.Net框架类型System.SbyteSystem.Int16System.Int32System.Int64有无符号是是是是占据位数1248取值范围-128到127-32768到32767-2147483648到2147483647-9223372036854775808到9223372036854775807byteushortuintSystem.ByteSystem.Uint16System.UInt32否否否1240到2550到655350到4294967295ulongfloatSystem.Uint64System.Single否是840到18446744073709551615可能值从±1.5x10-45到±3.4x1038,小数点后7位有效数字doubleSystem.Double是8可能值从±5.0x10-324to±1.7x10308小数点后15到16位有效数字decimalSystem.Decimal是12可能值从±1.0x10-28到±7.9x1028小数点后28到29位有效数字charboolSystem.CharSystem.BooleanN/AN/A21/2任何16位Unicode字符true或者false在下面的代码中,两个变量都声明为整形,并得到赋值:intx=10;inty=x;y=20;//这条语句运行后x的值为10,y的值为20;引用类型C#预定义的引用类型包括object和string类型。正如我们在上面提到的,object类型是所有其他类型的最终基类。用户定义的引用类型可以是接口类型、类类型和委托类型(第12课会有具体介绍)。引用类型事实上保存一个指向它引用的对象的内存地址。下面的代码段中有两个变量引用了同一个对象(本例中,假设这个对象有一个数据成员’myValue’):objectx=newobject();x.myValue=10;objecty=x;y.myValue=20;//这条语句执行后,x.myValue和y.myValue的值都为20。上面的这段代码演示了引用类型的一个特点:改变某一个引用指向的对象的属性同时也会影响到所有其他指向这个对象的引用。不过,strings类型虽然也是引用类型,但它的工作方式更象值类型。当一个字符串被指定了另一个字符串的值时,例如:strings1="hello";strings2=s1;s2和s1都引用了同一个字符串类型,但是当s1的值发生改变时,例如s1=”goodbye”;s2的值仍然