Question: 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? :)

Answer: 
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.
You should let the GC handle that for you. That's it's job.

Some resources should be disposed of, like DB connections and file handles, so put those in a `using` block (C#). This isn't one of those cases, though.