Maybe it's just really the SOP. The way I interpret is that perhaps the object that own the unmanaged resources still not yet going to cease but the user wants to release the resources so that another object or something can use it. Hence, the object calls the Dispose() method once all references to the unmanaged resource have been removed.
(maybe like someObj = null; ?)
But when implementing the Dispose() method, they also call this method GC.SuppressFinalize(this), which is confusing to me, as the object may own another unmanaged resource after disposing the first unmanaged resource.
maybe my interpretation is wrong?
There are a few cases why an instance will want to release it resources, to be used by another object is one possible scenario. The more common scenario is less baggage for the whole system. Sometimes the resources could be graphics memory or context for drawing. If your object doesn't need it anymore since it's going out of context, the release explicitly will be better, even though this graphical object may want to continue persist for cases like saving to persistent storage or just remaining dormant in the system.
Understand that releasing all references to an object doesn't necessary result in garbage collection. GC runs on it's own timing and only when a object freed from all strong references when selected for deallocation where the destructor will be involved. This can be a long time after your last reference to the object is removed.
So setting a reference to an object to null, which release the last reference to the object doesn't directly invoke the destructor. This part is the same as the Java GC system.
From what I read in the MSDN IDisposable API. Both the finalise method and the dispose method are to implement the removal of all resources held by the instance. From the method name GC.SuppressFinalize(this). It seems to instruct the GC not to invoke the finalize method on the object so that there is no double release of resources which is already taken care by the dispose method - verified here at
https://msdn.microsoft.com/en-us/library/system.gc.suppressfinalize(v=vs.110).aspx