Aracılığıyla paylaş


CA1001: Atılabilir alanlara sahip olan türler atılabilir olmalıdır

TypeName

TypesThatOwnDisposableFieldsShouldBeDisposable

CheckId

CA1001

Kategori

Microsoft.Design

Değişiklik kesiliyor

Bölünemez - türü derleme dışında görünür değilse.

Tür derlemenin dışından ise - kesiliyor.

Neden

Bir sınıf bildirir ve bir örnek alan uygulayan bir IDisposable türü ve sınıf uygulamıyor IDisposable.

Kural Tanımı

Uygulayan bir sınıf IDisposable , sahibi olan yönetilmeyen kaynaðý býrakmanýz arabirimi.Bir örnek alan bir IDisposable türü gösterir alan bir yönetilmeyen kaynağın sahibi.Bildirir bir sınıf bir IDisposable alan, dolaylı bir yönetilmeyen kaynağın sahibi ve uygulamalısınız IDisposable arabirimi.Sınıf doğrudan yönetilmeyen herhangi bir kaynağa sahip olmadığından, bir sonlandırıcıyı uygulamamalıdır.

İhlalleri düzeltmek nasıl

Bu kuralı ihlal düzeltmek için uygulamak IDisposable ve IDisposable.Dispose yöntem çağrısı Dispose yöntemi alanının.

Uyarıları ne zaman

Uyarı Bu kuraldan bastırmak değil.

Örnek

Aşağıdaki örnek kuralını ihlal eden bir sınıf ve kuralı uygulayarak karşılayan bir sınıfı gösterir IDisposable.Sınıf sınıf doğrudan yönetilmeyen kaynakları sahibi değil çünkü bir sonlandırıcıyı uygulamıyor.

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

İlgili kuralları

CA2213: Atılabilen alanlar atılmalıdır

CA2216: Atılabilir türler sonlandırıcıyı bildirmelidir

CA2215: Atma yöntemleri taban sınıf atmayı çağırmalıdır

CA1049: Yerel kaynaklara sahip olan türler atılabilir olmalıdır