我知道 一个方法在运行完毕以后 方法局部值变量和指针就会被销毁
但是类的作用域 是怎么才会被销毁呢?
好比这个Form窗体 我是关闭了它 Form这个类才会被销毁吗?
还望大神给解释下 谢谢
namespace Demo { public class classA { public void CallB() { classB b = new classB(); b.DoSomeThing(); } } public class classA2 { private classB _b = new classB(); public void CallB() { _b.DoSomeThing(); } } public class classB { public void DoSomeThing() { // } } }
不知道我这么写你能理解不?
classA中,函数CallB()结束,指向b的指针就销毁了。
classA2中,_b要等到自身的实例被销毁后才会销毁。
类的作用域简称类域,他是指在类的定义中由一对花括号所括起来的部分。每一个类都具备该类的类域,该类的成员局部于该类所属的类域中。
销毁应该是:等垃圾回收器运行,到时候没有被引用的对象就会被垃圾回收器回收
那大神 类域在什么情况下才会被超出呢?
@狂扁小朋友: 这太高深了,我也不太清楚
类怎么销毁?应该是对象吧。当一个对象没有被引用的时候系统会自动回收这个对象占用的资源,也就算“销毁”了吧。愚见!
我现在唯一纠结的是怎么才算未被引用呢? 比如一个对象,在一个方法里执行,这个方法执行完毕以后,这个对象的指针才会被销毁呢?
@狂扁小朋友: 应该是这么理解的,好像C#也有析构函数的,你可以写一个析构函数,调试一下,当调用析构函数的时候,就是资源回收的时候吧。
关闭form后,窗体不一定会被销毁,关键还是在作用域的概念理解上。
当你构建一个窗体对象后,这个对象你要保存到一个变量吧?如果你保存到了一个变量,那么这个窗体被销毁(超出作用域)的情况是承载这个窗体的变量的作用域。
窗体被关闭后,只是说明这个窗体不能再显示了,关闭后的窗体,在作用域范围内,还是能操作窗体类内部的相关数据的。
当然,如果你没把窗体对象放置到一个变量,而是直接show,比如:new Form1().Show(),当然是在窗体被关闭后就会被销毁。
其实我对这个作用域的理解为:只要这个对象或类不在被用到了,他就销毁掉了。有时候发现你程序占用资源很多因为你还用到这个对象。所以使用完类后要手动清除对象,防止内存泄露。