共用方式為


CA2215:Dispose 方法應該呼叫基底類別處置

型別名稱

DisposeMethodsShouldCallBaseClassDispose

CheckId

CA2215

分類

Microsoft.Usage

中斷變更

不中斷

原因

實作 System.IDisposable 的型別會繼承自同樣實作 IDisposable 的型別。但是繼承型別的 Dispose 方法卻未呼叫父型別的 Dispose 方法。

規則描述

如果型別會繼承自可處置的型別,則必須從本身的 Dispose 方法呼叫基底型別 (Base Type) 的 Dispose 方法。呼叫基底型別方法 Dispose,確保會釋放由基底型別所建立的任何資源。

如何修正違規

若要修正此規則的違規情形,請呼叫 Dispose 方法中的 base.Dispose

隱藏警告的時機

如果 base.Dispose 的呼叫層級比規則的檢查層級更深層,則您可以放心地隱藏這項規則的警告。

範例

在下列範例中,程式碼會顯示實作 IDisposable 的型別 TypeA。

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

在下列範例中,程式碼會顯示繼承自型別 TypeA 並正確呼叫 Dispose 方法的型別 TypeB。

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

請參閱

參考

Implementing Finalize and Dispose

System.IDisposable