为什么你会想要在对话框中使用using语句进行初始化?

7
我正在从以下来源调整代码风格指南:http://www.csharpfriends.com/articles/getarticle.aspx?articleid=336 在“5.2 初始化”下,建议使用以下内容:
如果您初始化对话框,请尝试使用using语句: using (OpenFileDialog openFileDialog = new OpenFileDialog()) { }
这种风格的选择有哪些原因?

1
可能是作者在开玩笑,你觉得呢? - Waqas Raja
哇,这种敌对的氛围让我不想提问。Waqas,我希望我能看到你所看到的,但我是一个初学者,正在努力理解。 - Michael Allan Jackson
我花了将近4个小时的时间来查找这个问题的答案,尽管我理解为什么这个解决方案可以解决我的CA 2000错误问题。 - Unnikrishnan
7个回答

4

很可能你只需要短期使用对话框来进行即时输入。因此,通过使用语句,在你完成所需操作后可以释放资源(Dispose it)。

Using 仅是在使用后调用 dispose 方法的一种语法糖。


3

OpenFileDialog 实现了 IDisposable 接口。由于对话框通常只在特定方法的生命周期内存在,using 块确保它们被正确处理。

using (OpenFileDialog dialog = new OpenFileDialog()) {
  // Some setup work 
  ...
  return dialog.ShowDialog();
}

3
这并不是最好的例子,OpenFileDialog在对话框关闭时已经释放了所有资源。它是一个组件而不是控件。虽然这是实现细节,但一般来说,调用ShowDialog() 不会 自动释放窗体对象,不像Show()。这是必要的,以便您在检索对话框结果时不会担心ObjectDisposedException异常。现在重要的是,在这样做后自己释放它。
使用 using 语句可以很容易地实现这一点。

1

你会这样做的原因与使用任何using结构相同,即确保对象被处理。 OpenFileDialog实现了IDisposable接口,因此由消费者负责确保实例被处理,并且使用结构确保在对象上调用.Dispose。


0

其他答案中没有提到的一个关键点是所有对话框都是模态的,这意味着与您可能显示的常规窗体不同,模态对话框将阻止执行直到该窗体消失。这意味着在显示对话框后,执行返回到您时,对话框已经消失了!因此,现在是处理它的时间,这就是为什么建议使用using语句。


0
在C#语言中,using语句允许我们为对象生命周期定义一个作用域。该语句获取指定的资源,执行语句并最终调用对象的Dispose()方法来清理它。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接