【正确答案】值类型的变量直接包含它们的数据,而引用类型的变量存储对它们的数据的引用,后者称为对象。对于引用类型,两个变量可能引用同一个对象,因此对一个变量的操作可能影响另一个变量所引用的对象。对于值类型,每个变量都有它们自己的数据副本(除ref和out参数变量外),因此对一个变量的操作不可能影响另一个变量。所有的值类型均隐式派生自System.ValueType。与引用类型不同,从值类型不可能派生出新的类型。值类型不可能包含null值。
using System;
class MyClass
{
class SomeRef {
public int x;}
struct SomeVal {
public int x;
}
static void Main(string[] args){
SomeRef r1= new SomeRef(); //分配在托管堆上
SomeVal v1 = new SomeVal(); //分配在堆栈上
r1.x = 5; //在托管堆上修改
v1.x = 5; //在堆栈中修改
SomeRef r2 = r1; //仅拷贝引用
SomeVal v2 = v1; //现在堆栈上分配,然后拷贝值
r1.x = 8; //改变了r1.x r2.x
v1.x = 9; //仅改变了v1
Console.WriteLine(r1.x); //8
Console.WriteLine(r2.x); //8
Console.WriteLine(v1.x); //9
Console.WriteLine(v2.x); //5
}
}
【答案解析】