FxCop 1.32 Index Page / FxCop 1.32 / Rule Topics / Usage / Disposable types should declare finalizer

Disposable types should declare finalizer

TypeName: DisposableTypesShouldDeclareFinalizer
CheckId: CA2216
Category: Microsoft.Usage
Message Level: Error
Certainty: 50%
Breaking Change: NonBreaking

Cause: A type that implements System.IDisposable, and has fields that suggest the use of unmanaged resources, does not implement a finalizer as described by System.Object.Finalize.

Rule Description

A violation of this rule is reported if the disposable type contains fields of the following types:

How to Fix Violations

To fix a violation of this rule, implement a finalizer that calls your Dispose method.

When to Exclude Messages

It is safe to exclude a message from this rule if the type does not implement IDisposable for the purpose of releasing unmanaged resources.

Example Code

The following example shows a type that violates this rule.


using System;  
using System.Runtime.InteropServices;

namespace UsageLibrary
    public class  DisposeMissingFinalize :IDisposable
        private bool disposed = false;
        private IntPtr unmanagedResource;
        private static extern IntPtr AllocateUnmanagedResource();
        private static extern void FreeUnmanagedResource(IntPtr p);
            unmanagedResource = AllocateUnmanagedResource();
        protected virtual void Dispose(bool disposing) 
            if (!disposed) 
                // Dispose of resources held by this instance.
                disposed = true;
                // Suppress finalization of this disposed instance.
                if (disposing)

        public void Dispose()

        // Disposable types with unmanaged resources implement a finalizer.
        // Uncomment the following code to satisfy rule:
        //  DisposableTypesShouldDeclareFinalizer
        // ~TypeA()
        // {
        //     Dispose(false);
        // }

Related Rules

Call GC.KeepAlive when using native resources

Dispose methods should call SuppressFinalize

Types that own native resources should be disposable

See Also

Implementing Finalize and Dispose | System.IDisposable | System.IntPtr | System.Runtime.InteropServices.HandleRef | System.UIntPtr | System.Object.Finalize
Send comments on this topic.

© 2002 - 2004 Microsoft Corporation. All rights reserved.