This blog shows the difference between Finalize and Dispose
Finalize :
·
Finalize() is called by the runtime
·
Is a C# equivalent of destructor, called by
Garbage Collector when the object goes out of scope.
·
Implement it when you have unmanaged resources
in your code, and want to make sure that these resources are freed when the
Garbage collection happens.
·
Finalize() can NOT be overridden or called in
C#.
·
Since, Finalize() is called by the Garbage
Collector, it is non-deterministic.
Dispose :
·
Dispose() is called by the user
·
Same purpose as finalize, to free unmanaged
resources. However, implement this when you are writing a custom class, that
will be used by other users.
·
Overriding Dispose() provides a way for user
code to free the unmanaged objects in your custom class.
·
Dispose() has to be implemented in classes
implementing IDispose interface.
·
Dispose() method is called explicitly in the
code itself.