从派生的HashAlgorithm诸如MD5CryptoServiceProvider

物件具有Dispose()方法,但它的私有。相反,它具有一个清除()方法,“释放所有资源”,由它使用。

WTF?

这是如何正确地处置的HashAlgorithm一个的呢?

var hasher = new MD5CryptoServiceProvider();

byte[] hashCode = hasher.ComputeHash(data);

hasher.Clear();

有人想解释这个给我吗? :)

有帮助吗?

解决方案

与反射器寻找,ClearHashAlgorithm方法简单地调用私有Dispose方法。之所以暴露与名Clear的方法可能只是该类的设计者认为这将是一个哈希算法更合适的名称。你看BCL的其他部分,如CloseSystem.IO.Stream内类似的风格。此外,最好的做法是在这里使用using块,它结束时,它会自动调用私有Dispose方法。

其他提示

虽然Dipose()方法是私有的,如果你施放它IDisposable你可以访问它。正如其他人说,虽然,Clear()会打电话给你。

一个更好的方法,但是,是包围在一个使用()块中的变量的声明和和分配:

byte[] hashCode;

using(var hasher = new MD5CryptoServiceProvider())
{
    hashCode = hasher.ComputeHash(data);
}

您应该让GC搞定你。这就是它的工作。

一些资源应被设置的,像DB连接和文件句柄,所以把那些在一个using嵌段(C#)。这不是这些情况之一,虽然。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top