class A
{
int a = 12
}
class B
{
static void Main(string[] args)
{
A C1 = new A();
A C2 = new A();
Console.WriteLine("C1.a");
C2.a=6
Console.WriteLine("C2.a");
}
}
如这个例子,c1和c2 是否是在堆中开辟一个小的内存空间,然后引用了同为堆上的a=12,对吗? 然后c2.a=6就是重新在堆上面声明了一个a=6的内存空间,是否可以这样理解?
谢谢回答,那我还想问下,大部分的(函数)方法使用,是不是等于引用类型,其实就是方法在栈中运行的时候,其中的值是从堆里面引用的,然后方法使用完成,自动删除,但是引用的值还是存在在堆中的。
追答饿。。
方法里面的引用类型变量,其内存是引用在堆上的,但是值类型变量,是分配在内存上面的。方法里面值类型变量跟类成员的值类型成员,其内存分配地址是不同的。
关于内存回收,.net有GC来管理内存回收,所以方法结束后,对于我们来说,我们不知道内存是在什么时候被回收的。“但是引用的值还是存在在堆中的”,这个是无法确定的。至于你说的“自动删除”不理解是删除什么。
哦我说的是栈的删除方法,是不是先放后进,到栈顶自动删除呢。