【问题标题】:Why would you want to initialize a dialog with a using statment?为什么要使用 using 语句初始化对话框?
【发布时间】:2011-04-01 19:32:41
【问题描述】:

我正在改编此来源的编码风格指南: http://www.csharpfriends.com/articles/getarticle.aspx?articleid=336

在“5.2 初始化”下,推荐如下:

如果你初始化一个对话框尝试使用 使用语句:

使用 (OpenFileDialog openFileDialog = 新的 OpenFileDialog()) { }

选择这种风格的原因是什么?

【问题讨论】:

  • 可能是作者在开玩笑,你怎么看?
  • 哇,敌意,让我不想问问题。 Waqas,我希望我能看到你所看到的,但我是一个试图理解的初学者。
  • 我花了将近 4 个小时的时间才找到这个问题,虽然我明白为什么这解决了我的 CA 2000 错误问题。

标签: c# coding-style idisposable


【解决方案1】:

您可能只需要短期对话即可立即输入。因此,使用 using 语句,您可以在完成所需内容后释放资源(Dispose)。

Using 只是使用后调用 dispose 方法的语法糖。

【讨论】:

    【解决方案2】:

    OpenFileDialog 实现了IDisposable 接口。鉴于对话框通常具有特定方法的生命周期,using 块确保它们将被正确处理

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

    【讨论】:

      【解决方案3】:

      这不是最好的例子,当对话框关闭时,OpenFileDialog 已经释放了所有资源。它是一个组件,而不是控件。这是一个实现细节。通常,调用 ShowDialog() 不会不会自动处理表单对象。与 Show() 不同。这是必要的,以便您检索对话结果而不用担心 ObjectDisposedException。现在重要的是您在这样做后自己处理它。

      using 语句很容易。

      【讨论】:

        【解决方案4】:

        您这样做的原因与您使用任何 using 构造的原因相同,该构造是为了确保对象被释放。 OpenFileDialog 实现了 IDisposable,因此由消费者来确保实例被释放,而 using 构造确保 .Dispose 在对象上被调用。

        【讨论】:

          【解决方案5】:

          c#语言中的using语句 允许我们定义一个范围 对象生命周期。这个说法 获取指定的资源, 执行语句,最后 调用 Dispose() 方法 对象来清理它。

          【讨论】:

            【解决方案6】:

            using的定义

            using: 定义一个作用域,一个或多个对象将在该作用域之外被释放。

            我想这个定义说明了一切。

            如需更多了解,请阅读 msdn 上的 using Statement

            what-is-the-c-using-block-and-why-should-i-use-it

            Get More Info

            【讨论】:

              【解决方案7】:

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

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2010-11-10
                • 1970-01-01
                • 2012-01-29
                • 1970-01-01
                • 1970-01-01
                • 2010-12-22
                • 1970-01-01
                • 2013-03-12
                相关资源
                最近更新 更多