与Visual Studio中的默认C#模板一样,我将Windows Form
定义为静态对象,如下所示:
public static FormMain formMain;
static void Main()
{
formMain = new FormMain();
Application.Run(formMain);
formMain.Dispose();
}
正如您所看到的,我在调用它之前为此静态表单分配了一个内存空间(使用new
)并在表单关闭后释放了内存(使用Dispose
)
但是,在这种静态形式中,我已经定义了几个非静态对象(比如标签),如下所示:
public FormMain()
{
// some code here
Label myLabel1 = new Label();
Label myLabel2 = new Label();
Label myLabel3 = new Label();
// some code here
}
现在,我有两个问题:
我是否还必须Dispose
这些非静态对象,或者在调用formMain.Dispose();
行后是否释放它们(释放内存)?
如果我需要处理这些非静态对象,我应该在程序的哪个阶段使用Dispose
(例如,在FormClosed
或{{1}中} event)?
注意:我尽量不在Visual Studio中使用表单设计工具,但更喜欢逐行编写表单。
答案 0 :(得分:3)
与Visual Studio中的默认C#模板一样,我将Windows窗体定义为静态对象,如下所示:
不确定为什么要将应用程序主窗口窗体存储为公共静态字段。您在考虑什么特殊情况?
如您所见,我在调用之前为此静态表单分配了一个内存空间(使用new)...
这不是C ++。在C#中调用new
是强制性的,当涉及引用类型时,它不是一个选项。
并在表单关闭后释放内存(使用
Dispose
)。
调用Dispose
根本不释放任何托管内存。我建议你阅读IDisposable
模式和托管内存模型,你似乎在这里误解了很多。
我必须同时处理这些非静态对象,或者只要formMain.Dispose();它们是否被释放(释放内存);行被调用?
静态或非静态无关,您应该丢弃所有一次性物品。阅读this了解更多信息
如果我需要处理这些非静态对象,我应该在程序的哪个阶段使用Dispose(比如,在FormClosed或FormClosing事件中)?
您应该遵循IDisposable
模式的指导原则。