مشاركة عبر


تمكين وتعطيل تحليل تعليمات برمجية تحذيرات/C + + C محددة قم بتمكين و تعطيل تحليل تعليمات برمجية لتحذيرات محددة

TypeName

TypesThatOwnDisposableFieldsShouldBeDisposable

CheckId

ca1001

Category

Microsoft.تصميم

تعطيل تغيير

Breaking غير-إذا كان النوع هو لا vهوible خارج تجميع.

فصل-إذا كان النوع هو vهوible خارج تجميع.

السبب

تعريف فئة و تطبق على حقل مثيل هو System.IDisposableنوع و لا تطبق الفئة IDisposable.

وصف القاعدة

بتطبيق فئة IDisposableواجهة إلى التخلص من موارد غير المدارة التي تملك. مثيل الحقول التي هو IDisposableنوع يشير إلى أنه يملك الحقل على مورد غير المدار. فئة التصريح IDisposableيملك حقل غير مباشر لمورد غير مدار و يجب أن تطبق IDisposableالواجهة. إذا فئة لا تملكها مباشرة أية موارد غير مدار، يجب أن لا تطبيق أداة الإنهاء.

كيف إلى الإصلاح انتهاكات

إلى إصلاح انتهاكا لهذه قاعدة، تطبق IDisposableومن IDisposable.Disposeاستدعاء الأسلوب للحقل Disposeالأسلوب.

عند إلى منع التحذيرات

لا بمنع تحذير من هذه قاعدة.

مثال

يظهر المثال التالي فئة تخالف قاعدة و فئة يحقق قاعدة بواسطة تطبيق IDisposable. الفئة تطبيق أداة الإنهاء لأنك غير مباشرة تملك أية موارد غير مدار.

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: Disposable fields should be disposed

ca2216: disposable أنواع يجب أن تقوم بتعريف أداة الإنهاء

ca1901: يجب أن تكون تصريحات P/Invoke المحمولة

ca1049: يجب أن تكون الأنواع التي تملك موارد أصلي disposable