工作已经有一年有余做项目的时侯经常碰到值类型和引用类型当时对这两个概念很难理解今闲暇之时翻看红皮书顿有所悟和大家分享一下 从概念上区分值类型直接存储其值引用类型存储对值的饮用按照存储位置上的不同值类型存储在堆栈中引用类型存储在托管堆上 下面用一个简单实例来说明两者的区别 代码 //i j 都是值类型 int i j; i = ; j = i; ConsoleWriteLine(i= + i); j = ; ConsoleWrite(i= + i); ConsoleReadLine(); //结果 //i = ; //i= 注值类型的变量直接包含值将一个值类型变量赋给另外一个值类型变量时将复制包含的值所以本实例中两个变量在内存的两个地方存储 代码 Rainless RLA RLB; RLA = new Rainless(); RLAstr = 改变前; RLB = RLA; ConsoleWriteLine(RLAstr); RLBstr = 改变后; ConsoleWriteLine(RLAstr); ConsoleReadLine(); //输出结果 //改变前 //改变后 注和上面例子比较同是把一个变量赋值给另外一个变量可两者之间的区别就大了Rainless是一个类类属于引用类型引用类型的赋值只复制对象的引用而不对象本身所以RLA和 RLB只是保留了一个引用只是引用了同一个对象因此对RLB的修改会影响RLA 下面说一下值类型和引用类型的组成部分 值类型主要有两类组成 · 结构 ·枚举 结构分为下面几类 ·Number(数值)类型 ·Bool ·用户自定义的结构 其中数值类型又包括整数浮点数decimal 先写到这里接下来讲述的是out和ref的区别 |