cor*_*ore 5 .net hashalgorithm
从HashAlgorithm派生的对象(如MD5CryptoServiceProvider)具有Dispose()方法,但它是私有的.相反,它有一个Clear()方法,它"释放它所使用的所有资源".
WTF?
这是如何正确处理HashAlgorithm的呢?
var hasher = new MD5CryptoServiceProvider();
byte[] hashCode = hasher.ComputeHash(data);
hasher.Clear();
Run Code Online (Sandbox Code Playgroud)
有人想向我解释这个吗?:)
Ada*_*son 11
虽然该Dipose()方法是私有的,但如果您将其投射到IDisposable您可以获得访问权限.正如其他人所说的那样,Clear()会为你打电话.
但是,更好的方法是将变量的声明和赋值包含在using()块中:
byte[] hashCode;
using(var hasher = new MD5CryptoServiceProvider())
{
hashCode = hasher.ComputeHash(data);
}
Run Code Online (Sandbox Code Playgroud)
用Reflector看,Clear方法HashAlgorithm简单调用私有Dispose方法。公开带有名称的方法的原因Clear可能只是该类的设计者认为它更适合哈希算法的名称。您会在 BCL 的其他部分看到类似的样式,例如Closefor System.IO.Stream. 此外,这里的最佳实践是使用一个using块,它会Dispose在完成后自动调用私有方法。
| 归档时间: |
|
| 查看次数: |
2603 次 |
| 最近记录: |