2

Microsoft .NET API から、次の情報を抽出できます。

  • usingの実装を呼び出しIDisposable.Dispose()ます。
  • IDisposable.Dispose()Flush()任意のStreamインスタンスを呼び出す必要があります。
  • CryptoStream.Close()を呼び出しますCryptoStream.FlushFinalBlock()

ただし、これは仕様にギャップを残すようです:CryptoStreamインスタンスを破棄すると も呼び出さCryptoStream.FlushFinalBlock()れますか?もしそうなら、これはどこに文書化されていますか?

4

1 に答える 1

2

Dispose()FlushFinalBlock()まだ呼び出されていない場合は呼び出します。これはドキュメントにもありますが、中央ではなく分散されています。

CryptoStreamsClose()または(パラメーターなしの) publicをオーバーロードしないため、クラスDispose()の実装が呼び出されます。Stream

Stream#Dispose()(s. Remarks) のドキュメントには次のように記載されています。

このメソッドは、変更をバッキング ストアに書き込み、ストリームを閉じてリソースを解放することにより、ストリームを破棄します。

これは、ソース コード (.NET Framework 4.8 以降) と一致しています。Stream#Dispose()を呼び出しますStream#Close()

CryptoStream#FlushFinalBlock()(s。Remarks)のドキュメントには、 (すでに説明したように)次のように記載されています。

Close メソッドを呼び出すと、FlushFinalBlock が呼び出されます。

これもソース コード (.NET Framework 4.8 以降) と一致しています。Close()(とりわけ) 保護された (仮想) オーバーロードを呼び出しますDispose(true)。これは でオーバーライドされCryptoStreamます。 を参照してください。CryptoStream#Dispose(bool disposing)FlushFinalBlock()_finalBlockTransformed

これらの詳細は、CryptoStream#Dispose(Boolean)(s. Remarks)に記載されています。

このメソッドは、public Dispose() メソッドと Finalize メソッドによって呼び出されます。Dispose() は、保護された Dispose(Boolean) メソッドを、破棄パラメーターを true に設定して呼び出します...

于 2021-07-01T07:53:32.077 に答える