Microsoft 文档在此页面上有以下代码:
最内部的“使用”语句假设 Dispose csEncrypt,而后者又假设 Dispose msEncrypt 流。但是,在最内部的 using 语句范围之后,msEncrypt 仍然存在并被使用(调用它的 ToArray())。
微软文档明确指出:“当 StreamWriter.Dispose 被调用时,StreamWriter 对象在提供的 Stream 对象上调用 Dispose()。”。后者意味着 csEncrypt 也被处置/关闭,这反过来又关闭了 msEncrypt ( https://referencesource.microsoft.com/#mscorlib/system/security/cryptography/cryptostream.cs,23052627697efb77,CryptoStream 可以离开基础流打开?)。
然后请解释我们如何仍然可以调用“msEncrypt.ToArray();” 在最里面的 using 语句的范围结束之后?
using (MemoryStream msEncrypt = new MemoryStream())
{
using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
{
using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
{
//Write all data to the stream.
swEncrypt.Write(plainText);
}
encrypted = msEncrypt.ToArray();
}
}