Export (0) Print
Expand All
Expand Minimize
This topic has not yet been rated - Rate this topic

CA1001: Types that own disposable fields should be disposable

TypeName

TypesThatOwnDisposableFieldsShouldBeDisposable

CheckId

CA1001

Category

Microsoft.Design

Breaking Change

Non-breaking - If the type is not visible outside the assembly.

Breaking - If the type is visible outside the assembly.

A class declares and implements an instance field that is a System.IDisposable type and the class does not implement IDisposable.

A class implements the IDisposable interface to dispose of unmanaged resources that it owns. An instance field that is an IDisposable type indicates that the field owns an unmanaged resource. A class that declares an IDisposable field indirectly owns an unmanaged resource and should implement the IDisposable interface. If the class does not directly own any unmanaged resources, it should not implement a finalizer.

To fix a violation of this rule, implement IDisposable and from the IDisposable.Dispose method call the Dispose method of the field.

Do not suppress a warning from this rule.

The following example shows a class that violates the rule and a class that satisfies the rule by implementing IDisposable. The class does not implement a finalizer because the class does not directly own any unmanaged resources.


using System;
using System.IO;

namespace DesignLibrary
{
   // This class violates the rule.
   public class NoDisposeMethod
   {
      FileStream newFile;

      public NoDisposeMethod()
      {
         newFile = new FileStream(@"c:\temp.txt", FileMode.Open);
      }
   }

   // This class satisfies the rule.
   public class HasDisposeMethod: IDisposable
   {
      FileStream newFile;

      public HasDisposeMethod()
      {
         newFile = new FileStream(@"c:\temp.txt", FileMode.Open);
      }

      protected virtual void Dispose(bool disposing)
      {
         if (disposing)
            {
               // dispose managed resources
               newFile.Close();
            }
          // free native resources
      }

      public void Dispose()
      {
         Dispose(true);
	     GC.SuppressFinalize(this);
      }
   }
}


Did you find this helpful?
(1500 characters remaining)
Thank you for your feedback

Community Additions

ADD
Show:
© 2014 Microsoft. All rights reserved.