c#变量赋值

来源:百度知道 编辑:UC知道 时间:2024/05/25 17:24:27
我是个菜鸟,有个问题不懂,求教高手

MyClass是一个类,里面有个pulbic属性MyInt

现在在另一个测试类(带Main方法)中实例化MyClass的两个对象 X和Y

X.MyInt=18;

原来看到过这样一句话:引用类型赋值时,保存的不是对象本身,而是保存的对象的引用。

请问,X是类的对象,类的对象也应该是引用类型吧,那么上面那个X.MyInt=18;赋值,难道X.MyInt保存的不是18,而是内存中指向18 那块内存的指针【也就是引用】??我这样理解对不对

如果我又建了个结构,结构是值类型 我声明一个结构对象 Z
Z.MyInt=18;是不是Z.MyInt开辟的内存区域保存的是18,而不是引用,这样理解对不对?

还有最后一个问题,上面类创建了X 和Y 两个对象
我给X.MyInt=18;
然后Y=X;//这句是不是让Y的指向和X一样,都指向 内存中那个18?

现在Y.MyInt=20; Y的指向变了,X是不是跟着变啊

上面的问题困扰了很久,看了许多 什么堆啊托管什么的不太理解

求教高手来几句通俗易懂的,3Q
还有我原来一直这样以为
string str="CCC";
比如这个,我一直以为是开辟了个内存地址,保持CCC,但照上面那句话的理解
string 是引用类型,它的对象保存的应该是对象的引用的地址,而不是具体的值,,
现在我搞不清楚到底哪个是对哪个是错,求高手解答

感谢,那如果类中还有个string name;这个字段

我的X.name="ddd";
这个如何解释,是按引用类型存储,还是值类型

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

引用类型存储的是引用,值类型存储的是实际的值,如果将引用类型的对象X赋给Y,那等于是X和Y都指像了一块内存区域,就想两根线拉着一个气球一样,只要修改其中任意一个对象,另一个对象也会被修改,至于那个堆和栈就不用深入了解了,只要知道有那么回事就可以了

类确实是引用类型,但是你X.MyInt是值类型,MyInt是整型,不是引用类型
Y=X,是指Y这个对象对X的引用,也就是他们都是引用了X这个对象,并不是说指向了18

string是特殊的类型,你也可以把string当成值类型看也得

原因是string有一个特点叫“唯一不变性”