明明用,可是就是说不出个所以然来,汗!看来要复习了!
c#语言的类型划分为两个大类:值类型和引用类型!
值类型:value-type
引用类型:reference-type
值类型和引用类型的不同之处在于:值类型的变量直接包含其数据,而引用类型的变量存贮对其数据的引用,后者称为对象。对于引用类型,两个变量可能引用同一个对象,因此对一个变量的操作可能影响另一个变量所引用的对象。对于值类型,每个变量都有自己的数据副本,对一格变量的操作不可能影响到另一个变量。
c#的类型系统是统一的,因此任何类型的值都可以按对象处理。c#中的每个类型直接或间接地从object类类型派生,而object是所有类型的最终基类。引用类型的值都被当作对象来处理,这是因为这些值都可以简单地被视为属于object类型。值类型的值则通过执行装箱和取消装箱操作按对象处理。
值类型的变量总是包含该类型的值。与引用类型不同,值类型的值不可能为null,也不可能引用派生程度较大的类型的对象。
值类型的变量赋值会创建所赋的值的一个副本。这不同于引用类型的变量赋值,引用类型的变量赋值赋值的事引用而不是由引用标示的对象。
引用类型是类类型、接口类型、数组类型或委托类型。
引用类型值是对该类型的某一个实例的一个引用,后者称为对象,null值比较特别,它适用于所有引用类型,用来表示“没有被引用的实例”。
示例代码:
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);
}
}