class Program { //main栈区,用来存放Main方法中出现的变量 static void Main(string[] args) { //创建一个对象时,系统内存中有两个东西:堆内存中保存了对象本身,栈内存中保存了引用该对象的引用变量。 //new DataWrap()创建了一个DataWrap对象,DataWrap对象被存放在堆内存中 //t=引用变量,来指向DataWrap对象 DataWrap t = new DataWrap(); //堆中开辟两块内存,一个放6,一个放9 t.A = 6; t.B = 9; //再定义一个引用变量t2,t2也是指向DataWrap对象 DataWrap t2 = t; //将堆内存中DataWrap对象的两个Field值交换 Swap(t); //这个时候可以看到不管t还是t2,指针不变,所以显示的值都是96 Console.Write(t.A); Console.Write(t.B); //96 Console.Write(t2.A); Console.Write(t2.B); //96 Console.ReadLine(); } //Swap栈区,用来存放Swap方法中出现的变量 //比如这里的t和Main()中的t完全是两码事 private static void Swap(DataWrap t) { int temp = t.A; t.A = t.B; t.B = temp; } } public class DataWrap { public int A { get; set; } public int B { get; set; } }