Finalize() -
this function will clean up the Unmanaged resources during Garbage collection process only -
User is unaware when this method is actually executed.
Also the user cannot call this function directly to clean up memory.
Dispose() -
By implementing IDisposable interface ,user can clean up UnManaged Resources,where the user will know exactly when the resources are freed up.
My understanding is that Finalize() cannot be overridden to clean up unmanaged resources.
This is a system process only for 'GC' process will use for cleaning up unmanaged resources.
If user need to clean up resources on their own , then he/she should implement IDisposable interface and call Dispose() explicitly. No other possibility !
And the best practice in Cleaning up unmanaged resources is using 'USING' statement.
Question 1: Is my understanding correct ? Please correct me in my above statements , if i am wrong.
Question 2: Also , i wanted to know ,can I Clean up Managed resources by Implementing IDisposable interface and by a call to Dispose() ?