当前位置导航:炫浪网>>网络学院>>网页制作>>ASP.NET教程

浅谈“值类型”和“引用类型”

  工作已经有一年有余,做项目的时侯经常碰到值类型和引用类型,当时对这两个概念很难理解,今闲暇之时翻看红皮书,顿有所悟,和大家分享一下。

  从概念上区分,值类型直接存储其值,引用类型存储对值的饮用。按照存储位置上的不同,值类型存储在堆栈中,引用类型存储在托管堆上。

  下面用一个简单实例来说明两者的区别:

  代码

  //i ,j 都是值类型

  int i, j;

  i = 10;

  j = i;

  Console.WriteLine("i=" + i);

  j = 20;

  Console.Write("i=" + i);

  Console.ReadLine();

  //结果

  //i = 10;

  //i=10

  注:值类型的变量直接包含值,将一个值类型变量赋给另外一个值类型变量时,将复制包含的值。所以本实例中两个变量在内存的两个地方存储。

  代码

  Rainless RLA, RLB;

  RLA = new Rainless();

  RLA.str = "改变前";

  RLB = RLA;

  Console.WriteLine(RLA.str);

  RLB.str = "改变后";

  Console.WriteLine(RLA.str);

  Console.ReadLine();

  //输出结果

  //改变前

  //改变后

  注:和上面例子比较,同是把一个变量赋值给另外一个变量,可两者之间的区别就大了。Rainless是一个类,类属于引用类型。引用类型的赋值只复制对象的引用,而不对象本身,所以RLA和 RLB只是保留了一个引用,只是引用了同一个对象,因此对RLB的修改会影响RLA。

  下面说一下值类型和引用类型的组成部分。

  值类型主要有两类组成:

  · 结构

  ·枚举

  结构分为下面几类:

  ·Number(数值)类型

  ·Bool

  ·用户自定义的结构

  其中数值类型又包括整数、浮点数、decimal。

  先写到这里,接下来讲述的是out和ref的区别。

相关内容
赞助商链接