مشاركة عبر


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

TypeName

DisposeMethodsShouldCallBaseClassDispose

CheckId

ca2215

Category

Microsoft.Usage

تعطيل تغيير

غير فاصلة

السبب

نوع تطبيق System.IDisposableيرث من نوع الذي يطبق أيضا IDisposable. Disposeأسلوب النوع inheriting لا يتصل Disposeالأسلوب للنوع الأصل.

وصف القاعدة

إذا كانت ترث نوعا من نوع disposable، يجب استدعاء Disposeطريقة الأساس اكتب من داخل الخاص به Disposeالأسلوب. استدعاء الأساس اكتب أسلوب يضمن تخلص أية موارد انشئت بواسطة الأساس عند إصدار نوع.

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

إلى إصلاح انتهاكا لهذه قاعدة، قم باستدعاء base.Disposeفي جهازDisposeأسلوب.

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

هو الأمن لمنع ظهور تحذير من القيم بالموضع هو قاعدة في حالة الاستدعاء base.Disposeيحدث عند المستوى استدعاء أعمق من اختبارات قاعدة.

مثال

يلي مثال يظهر على نوع TypeAالذي يطبق IDisposable.

using System;  

namespace UsageLibrary
{
    public class  TypeA :IDisposable
    {

        protected virtual void Dispose(bool disposing) 
        {
            if (disposing) 
            {
                // Dispose managed resources
            }

            // Free native resources
        }

        public void Dispose()
        {

                Dispose(true);

                GC.SuppressFinalize(this);

        }

        // Disposable types implement a finalizer.
        ~TypeA()
        {
            Dispose(false);
        }
    }
}

يظهر المثال التالي على نوع TypeBالتي ترث من نوع TypeAو بشكل صحيح باستدعاء به Disposeالأسلوب.

Imports System

Namespace UsageLibrary

  Public Class TypeB
      Inherits TypeA

      Protected Overrides Sub Finalize()
          Try
              Dispose(False)
          Finally
              MyBase.Finalize()
          End Try
      End Sub

  End Class

End Namespace

راجع أيضًا:

المرجع

تطبيق إنهاء و التخلص إلى تنظيف لأعلى موارد غير المُدارة

System.IDisposable