值類型和引用類型的区别

C# 支持两种类型:“值类型”和“引用类型”。
值类型(如 char、int 和 float)、枚举类型和结构类型。
引用类型包括类 (Class) 类型、接口类型、委托类型和数组类型。

值类型与引用类型的区别在于值类型的变量直接包含其数据,而引用类型的变量则存储对象引用。对于引用类型,两个变量可能引用同一个对象,因此对一个变量的操作可能影响另一个变量所引用的对象。对于值类型,每个变量都有自己的数据副本,对一个变量的操作不可能影响另一个变量。

示例
using System;
class Class1
{
     public int Value = 0;
}
class Test
{
     static void Main() {
         int val1 = 0;
         int val2 = val1;
         val2 = 123;
         Class1 ref1 = new Class1();
         Class1 ref2 = ref1;
         ref2.Value = 123;
         Console.WriteLine("Values: {0}, {1}", val1, val2);
         Console.WriteLine("Refs: {0}, {1}", ref1.Value, ref2.Value);
     }
}
显示了这种区别。运行该程序,可见下列输出:
Values: 0, 123
Refs: 123, 123

简单的说,一个传值,一个传对象。


值类型与引用类型的区别
1.     值类型的数据存储在内存的栈中;引用类型的数据存储在内存的堆中,而内存单元中只存放堆中对象的地址。
2.     值类型存取速度快,引用类型存取速度慢。
3.     值类型表示实际数据,引用类型表示指向存储在内存堆中的数据的指针或引用
4.     值类型继承自System.ValueType,引用类型继承自System.Object
5.     栈的内存分配是自动释放;而堆在.NET中会有GC来释放

 

posted @ 2009-02-22 15:07  瑞君  Views(150)  Comments(0Edit  收藏  举报