一尘不染

处置新表格的正确方法

c#

因此,在我的应用程序中,我倾向于动态创建表单的新实例,然后用于Form.Show()显示它们(非模态)。

private void test_click(object sender, EventArgs e)
{
    var form = new myForm();
    form.Show();
}

但是,Code Cracker告诉我应该处理这些表格。因此,我用“ using”语句包装了它们,但是随后它们在打开后立即关闭。

using (var form = new myForm())
{
    form.Show();
}

我不想使用Form.ShowDialog(),因为在某些情况下,我会打开仅显示报告的新窗口;我不需要他们是模态的。


阅读 295

收藏
2020-05-19

共1个答案

一尘不染

嗯,“代码破解者”似乎是该工具的一个非常合适的术语,它的建议无疑使您编写了破坏程序的代码。黄金法则是 永远不要
相信静态代码分析工具中的IDisposposable建议,他们都不会对代码 执行
有足够的了解。他们永远无法弄清楚哪个Dispose()调用可以完成工作。

它看不到的是Form类已经知道如何处置自己。这样做很容易,当窗口关闭时,对象变得不可用。如果没有更多的窗口,则没有理由继续使用Form对象。在.NET中,奢侈品不是很常见,但肯定是受45年前为Xerox工作的聪明程序员的启发。

您只需要记住一个特殊的规则,当您使用ShowDialog()显示窗口时,它不会 自行
处理。这是故意的,这使得检索对话框结果的风险太大。对ShowDialog()调用使用 using 语句非常容易,在关闭窗口之前,该调用不会返回。

2020-05-19