如何处置一块田地

How does one dispose of a field

我最近开始使用代码分析器和 OOOO!男孩,我有很多违规行为吗? 大多数是 iDisposable 我一直在做我的研究,到目前为止我已经设法处理了一些。 但是我想我已经用尽了我的一点点智慧所以帮助任何人。

public 部分 class Form1 : Form 已经实现了 idisposable 方法我只是不知道在这种情况下我应该以什么方式使用它。

   public partial class Form1 : Form 

   {

     private readonly Label CompPany = new Label();

    private readonly SpeechRecognitionEngine _recognizer = 
    new SpeechRecognitionEngine(new System.Globalization.CultureInfo("en- 
    US"));

   }

我需要知道如何处理这种字段

Dipose方法由IDisposable接口公开,只有实现了该接口的对象才会有该方法。使用此方法关闭或释放非托管资源,例如文件、流和由实现此接口的 class 的实例持有的句柄。按照惯例,此方法用于与释放对象持有的资源或准备对象以供重用相关的所有任务。 SpeechRecognitionEngine 实现 IDisposable 然后它有 Dispose 方法。有关详细信息,请参阅 official docs。相反,如果您还尝试处理 Form,那么它已经实现了 IDisposable,只需像这样覆盖它:

public partial class Form1 : Form 
{
    private readonly SpeechRecognitionEngine _recognizer = 
        new SpeechRecognitionEngine(new System.Globalization.CultureInfo("en-US"));

    protected override void Dispose (bool disposing)
    {
        if (disposing)
        {
            _recognizer.Dispose();
        }
        base.Dispose(disposing);
    }
}

一个表单已经实现了 IDisposable。您需要做的就是重写 Dispose(bool) 并在处理为真时调用 _recognizer.Dispose():

public partial class Form1 : Form 
{
    private readonly SpeechRecognitionEngine _recognizer = 
        new SpeechRecognitionEngine(new System.Globalization.CultureInfo("en-US"));

    protected override void Dispose (bool disposing)
    {
        if (disposing)
        {
            _recognizer.Dispose();
        }
        base.Dispose(disposing);
    }
}

这样,每当处理表单时,也将处理创建的 SpeechRecognitionEngine。