gpt4 book ai didi

c# - 为什么你仍然可以使用已处置的对象?

转载 作者:行者123 更新时间:2023-11-30 13:21:52 24 4
gpt4 key购买 nike

我正在努力理解对象的处理和垃圾收集。特别是,我不明白为什么我仍然可以使用已处置的对象。我并没有尝试做任何实际的事情,我现在只是在玩弄理论,据我所知,我认为我无法做到以下几点:

class Program
{
static void Main(string[] args)
{
Person p = new Person();
using (p)
{
p.Name = "I am Name";
}
Console.WriteLine(p.Name); // I thought this would break because I've already disposed of p
Console.ReadLine();
}
}
public class Person : IDisposable
{
public string Name;
public void Dispose()
{
Console.WriteLine("I got killed...");
}
}

我希望有人能在这里给我一些方向或指导,以消除我对这个概念的误解?

最佳答案

处理一个对象并没有什么神奇的作用——CLR 根本不关心 IDisposable...它只是一个在 C#(和其他语言)中支持的框架接口(interface).调用 Dispose 就像调用其他方法一样。

如果您不使已处置的对象在您对其执行进一步操作时失败,它就不会。事实上,在某些情况下您确实希望能够 - 例如,在 MemoryStream 上调用 ToArray 在它被释放后就可以了,即使尽管您不能调用 Read 等。在写入 MemoryStream 的情况下,从将处理 MemoryStream 的包装器链接起来,这真的很方便,但您需要之后的数据。

但一般来说,您应该编写就好像您不能在处理后使用已处理的对象,除非您确定它仍然支持您需要的操作。 “我希望它会坏掉……”的默认位置是安全的。

关于c# - 为什么你仍然可以使用已处置的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35825309/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com