关于C#中引用对象生存期的疑惑,求正解

x_craft77 x_craft77 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
代码如下:
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还没有被释放?还不到时候?内存没有被写入新值,所以可以得出结果?.........
...全文
评论 11
收藏 已收藏
分享
返回顶部
x_craft77
C# 111,129 成员 642,539 内容