首先由MyClass声明的X、Y对象是引用类型没错。但其中的MyInt由于是int类型,所以是值类型。
X.MyInt=18;
这句代码会在栈中分配内存,并初始化这块内存为18;存的是值不是引用。
Y=X,正如你所说的。由于X、Y都是引用类型,所以会在托管堆中分配内存。
这句代码之后,Y就会指向系统为X分配的那块内存。实际上是同一块内存,当然修改了Y,X也会变了。
当然了,你可以自己写个测试程序,点击调试,在VS2008的调试菜单下的窗口中选择内存,可以查看X、Y的内存地址。它们的地址是一样的。
string是按引用存储的。