This rule assumes that IntPtr, UIntPtr, and HandleRef fields store pointers to unmanaged resources. Types that allocate unmanaged resources should implement IDisposable to allow callers to release those resources on demand and shorten the lifetimes of the objects holding the resources.
The recommended design pattern to clean up unmanaged resources is to provide both an implicit and an explicit means to free those resources using the System.Object.Finalize method and the System.IDisposable.Dispose method, respectively. The garbage collector calls the Finalize method of an object at some indeterminate time after the object is determined to be no longer reachable. After Finalize is called, an additional garbage collection is required to free the object. The Dispose method allows the caller to explicitly release resources on demand, earlier than the resources would be released if left to the garbage collector. After cleaning up the unmanaged resources, Dispose should call the System.GC.SuppressFinalize(System.Object) method to let the garbage collector know that Finalize no longer needs to be called; this eliminates the need for the additional garbage collection and shortens the lifetime of the object.