FCLコードで珍しいサンプルが見つかりました。BinaryReader.Dispose(bool disposing)は、ストリームへのローカル参照を作成します。どうして?
これはSystem.IO.BinaryReader方法である:
protected virtual void Dispose(bool disposing) {
if (disposing) {
Stream copyOfStream = m_stream;
m_stream = null;
if (copyOfStream != null && !m_leaveOpen)
copyOfStream.Close();
}
m_stream = null;
m_buffer = null;
m_decoder = null;
m_charBytes = null;
m_singleChar = null;
m_charBuffer = null;
}
'copyOfStream' が実行ロジックにどのような影響?
感謝を!私もそのオプションを仮定しましたが、Stream.Close()ではどのような例外が発生する可能性がありますか?私は何も見つかりませんでした。 – Illivion
これが根拠であるかどうかはわかりません。通常は、ブロックを使用してDisposeを呼び出します。これは、変数が使用されることは決してありません。しかし、この場合、例外安全性について話していると、誰かがDisposeメソッドの呼び出しを再試行でき、NullReferenceExceptionに直面します。 –
私のヌルチェックとインスタンスメソッド 'Close()'の呼び出しの間に、別のスレッドが何らかの形で 'm_stream'を' null'に設定できたのでしょうか? –