使用语句和表格

本文关键字:表格 语句 | 更新日期: 2023-09-27 18:07:13

我有一个基本的表单,它将尝试加载和播放用户的视频。表单可以从公共静态ShowDialogForm方法调用。该方法将尝试初始化视频,如果成功,则返回表单,否则将取消操作。在我的办公室,我们使用重构工具,它抱怨我的方法中缺少using语句。所以我的问题是,如果在这个实例中使用using语句提供任何好处。

这是原始代码

public static DialogResult ShowDialogForm(VideoNames videoName, Course course, IWin32Window parent)
{
   FlashPlayer form = new FlashPlayer();
   if (form.Initialize(videoName, course))
   {
     return form.ShowDialog(parent);
   }
   else
   {
     return DialogResult.Cancel;
   }
}

这是重构工具

建议的代码
public static DialogResult ShowDialogForm(VideoNames videoName, Course course, IWin32Window parent)
{
  using (FlashPlayer form = new FlashPlayer())
  {
    if (form.Initialize(videoName, course))
    {
      return form.ShowDialog(parent);
    }
    else
    {
      return DialogResult.Cancel;
    }
  }
}

使用语句和表格

是的,您应该在using块中封装任何实现IDisposable的对象,以确保GC正确地处理它。在需要更严格控制内存和进程的winforms或wpf应用程序中,您应该特别认识到这一点。

这个工具的抱怨是有效的。当您使用ShowDialog()显示表单时,表单对象不会像使用Show()时那样自动处理。这很重要,通常使用对话框让用户输入值,然后在ShowDialog返回后检索这些值。处置表单控件会有风险,很可能触发ObjectDisposedException。

因此,您总是使用using语句包装对话框创建,显示和结果检索,以便在所有操作完成后处理表单。

请注意,您实际上并不使用此对话框来检索任何内容。这可能意味着它根本不应该是一个对话。因此,使用Show()就不必处理它了。用户可以自由地继续使用剩下的用户界面,前提是这是合适的。非模态用户界面总是首选。

using语句将把你对'IDisposable' FlashPlayer的使用包装在try-finally块中,这意味着FlashPlayer将在你完成时被处置。这被认为是很好的实践,因为它释放了资源。

通常情况下,如果实现了IDisposable,最好的做法是将其包装在using语句中,或者在调用flashPlayer.Dispose()后手动清理。

好处可能并不显著,但是在类上实现IDisposable时,using语句确保代码将安全执行。如果类实现了它,那么很可能是有原因的。

您的工具是正确的。由于表单是一次性的,一旦您完成它。你必须处理掉。使用语句可以自动完成这些。