关于C#中引用对象生存期的疑惑,求正解
代码如下:
public class RepData
{
//定义
public MemoryStream memStream = null;
}
public RepData TestA()
{
//创建了
RepData repData = new RepData();
MemoryStream memStream = new MemoryStream();
//写入
memStream.WriteByte(65);
memStream.Seek(0, SeekOrigin.Begin);
//赋值
repData.memStream = memStream;
//释放-关键
memStream.Dispose();
//返回
return repData;
}
public void TestB()
{
//调用
RepData repData = TestA();
//输出
Response.BinaryWrite(repData.memStream.ToArray()); //正常运行,输出A
Response.Write((char)repData.memStream.ReadByte()); //运行出错,提示:无法访问已关闭的流
}
1、首先TestA在内部定义并实例化了一个RepData对象,并返回它,TestB调用TestA并接收返回值,按理说Test内部定义的RepData对象已经过了生存期了,为什么TestB中还能使用呢?
2、TestA中已经把memStream给Dispose了,为什么TestB中还能引用呢
Response.BinaryWrite(repData.memStream.ToArray()); //正常运行,输出A
Response.Write((char)repData.memStream.ReadByte()); //运行出错,提示:无法访问已关闭的流
虽然第二行代码被提示无法访问已关闭的流,但通过ToArray()确实是得到了正确的结果,问题在哪呢,是原来那个memStream还没有被释放?还不到时候?内存没有被写入新值,所以可以得出结果?.........