CA1001 : Les types qui possèdent des champs supprimables doivent être supprimablesCA1001: Types that own disposable fields should be disposable

TypeNameTypeName TypesThatOwnDisposableFieldsShouldBeDisposableTypesThatOwnDisposableFieldsShouldBeDisposable
CheckIdCheckId CA1001CA1001
CategoryCategory Microsoft.DesignMicrosoft.Design
Modification avec ruptureBreaking Change Sans rupture - Si le type n’est pas visible en dehors de l’assembly.Non-breaking - If the type is not visible outside the assembly.

Avec rupture - Si le type est visible en dehors de l’assembly.Breaking - If the type is visible outside the assembly.

CauseCause

Une classe déclare et implémente un champ d’instance qui est un System.IDisposable type et la classe n’implémente pas IDisposable.A class declares and implements an instance field that is a System.IDisposable type and the class does not implement IDisposable.

Description de la règleRule description

Une classe implémente la IDisposable interface pour supprimer les ressources non managées qu’il possède.A class implements the IDisposable interface to dispose of unmanaged resources that it owns. Un champ d’instance qui est un IDisposable type indique que le champ possède une ressource non managée.An instance field that is an IDisposable type indicates that the field owns an unmanaged resource. Une classe qui déclare un IDisposable champ indirectement possède une ressource non managée et doit implémenter le IDisposable interface.A class that declares an IDisposable field indirectly owns an unmanaged resource and should implement the IDisposable interface. Si la classe ne possède pas directement les ressources non managées, il ne doit pas implémenter un finaliseur.If the class does not directly own any unmanaged resources, it should not implement a finalizer.

Comment corriger les violationsHow to fix violations

Pour corriger une violation de cette règle, implémentez IDisposable et à partir de la System.IDisposable.Dispose appel de méthode le Dispose méthode du champ.To fix a violation of this rule, implement IDisposable and from the System.IDisposable.Dispose method call the Dispose method of the field.

Quand supprimer les avertissementsWhen to suppress warnings

Ne supprimez aucun avertissement de cette règle.Do not suppress a warning from this rule.

ExempleExample

L’exemple suivant montre une classe qui viole la règle et une classe qui satisfait la règle en implémentant IDisposable.The following example shows a class that violates the rule and a class that satisfies the rule by implementing IDisposable. La classe n’implémente pas de finaliseur, car la classe ne possède pas directement les ressources non managées.The class does not implement a finalizer because the class does not directly own any unmanaged resources.

Imports System
Imports System.IO
  
Namespace DesignLibrary

   ' This class violates the rule.
   Public Class NoDisposeMethod
   
      Dim newFile As FileStream

      Sub New()
         newFile = New FileStream("c:\temp.txt", FileMode.Open)
      End Sub

   End Class

   ' This class satisfies the rule.
   Public Class HasDisposeMethod 
      Implements IDisposable
   
      Dim newFile As FileStream

      Sub New()
         newFile = New FileStream("c:\temp.txt", FileMode.Open)
      End Sub

      Overloads Protected Overridable Sub Dispose(disposing As Boolean)

         If disposing Then
            ' dispose managed resources
            newFile.Close()
         End If

         ' free native resources

      End Sub 'Dispose
     
      
      Overloads Public Sub Dispose() Implements IDisposable.Dispose

         Dispose(True)
         GC.SuppressFinalize(Me)

      End Sub 'Dispose
    
   End Class

End Namespace
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);
      }
   }
}

CA2213 : Les champs pouvant être supprimés doivent l’êtreCA2213: Disposable fields should be disposed

CA2216 : Les types supprimables doivent déclarer un finaliseurCA2216: Disposable types should declare finalizer

CA2215 : Les méthodes Dispose doivent appeler la méthode Dispose de la classe de baseCA2215: Dispose methods should call base class dispose

CA1049 : Les types qui ont des ressources natives doivent être supprimablesCA1049: Types that own native resources should be disposable