Objects that derive from HashAlgorithm such as MD5CryptoServiceProvider have a Dispose() method, but it's private. Instead it has a Clear() method which "Releases all resources" used by it.
WTF?
Is this how to correctly dispose of a HashAlgorithm then?
var hasher = new MD5CryptoServiceProvider();
byte[] hashCode = hasher.ComputeHash(data);
hasher.Clear();
Someone wanna explain this one to me? :)
Looking with Reflector, the Clear
method of HashAlgorithm
simply calls the private Dispose
method. The reason for exposing a method with name Clear
was probably just that the designers of the class thought it would be a more suitable name for a hash algorithm. You see similar styles within other parts of the BCL, such as Close
for System.IO.Stream
. Also, best practice here is to use a using
block, which will automatically call the private Dispose
method when it's finished.