.NET:HashAlgorithmオブジェクトを配置
-
11-09-2019 - |
質問
などMD5CryptoServiceProviderなどHashAlgorithmから派生したオブジェクトは、廃棄()メソッドを持っているが、それはプライベートです。その代わりに、「すべてのリソースが解放」それが使用するクリア()メソッドを持っています。
WTF?
これはどのように正しく、その後HashAlgorithmを処分することですか?
var hasher = new MD5CryptoServiceProvider();
byte[] hashCode = hasher.ComputeHash(data);
hasher.Clear();
誰かがたいが私にこの1を説明しますか? :)
解決
リフレクターで見ると、Clear
のHashAlgorithm
方法は、単純にプライベートDispose
メソッドを呼び出します。名前Clear
とメソッドを公開するための理由は、クラスの設計者は、それがハッシュアルゴリズムのためのより適切な名前だろうと思っただけのことはおそらくでした。あなたは、このようなClose
ためSystem.IO.Stream
として、BCLの他の部分の中に似たスタイルを参照してください。また、ここでのベストプラクティスは、それが終了していますときに、自動的にプライベートusing
メソッドを呼び出しますDispose
ブロックを使用することです。
他のヒント
あなたはそれはあなたがそれにアクセスすることができDipose()
にキャスト場合IDisposable
メソッドは、プライベートですが。他の人が言ったように、しかし、Clear()
はあなたのためにそれを呼び出します。
より良いアプローチは、しかし、使用して()、ブロック内の変数の宣言と、および割り当てを囲むことである
byte[] hashCode;
using(var hasher = new MD5CryptoServiceProvider())
{
hashCode = hasher.ComputeHash(data);
}
あなたは、GCがあなたのためにそれを処理させる必要があります。それはそれが仕事だのです。
一部のリソースは、DB接続とファイルハンドルのように、処分され、そのusing
ブロック(C#の)中でそれらを配置する必要があります。これは、しかし、これらの例ではありません。