質問

などMD5CryptoServiceProviderなどHashAlgorithmから派生したオブジェクトは、廃棄()メソッドを持っているが、それはプライベートです。その代わりに、「すべてのリソースが解放」それが使用するクリア()メソッドを持っています。

WTF?

これはどのように正しく、その後HashAlgorithmを処分することですか?

var hasher = new MD5CryptoServiceProvider();

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

hasher.Clear();

誰かがたいが私にこの1を説明しますか? :)

役に立ちましたか?

解決

リフレクターで見ると、ClearHashAlgorithm方法は、単純にプライベート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#の)中でそれらを配置する必要があります。これは、しかし、これらの例ではありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top