我正在努力了解处理对象和垃圾收集.特别是,我不明白为什么我仍然可以使用处置对象.我不是想做任何实际的事情,我现在只是在玩理论,在我的理解中,我认为我无法做到以下几点:
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...");
}
}
Run Code Online (Sandbox Code Playgroud)
我希望有人可以在这里给我一些指导或指导,以便澄清我对这个概念的误解?
处置一个对象并没有什么神奇之处 - CLR根本不关心IDisposable......它只是一个在C#(和其他语言)中得到支持的框架接口.调用Dispose就像调用其他方法一样.
如果在对其执行进一步操作时未使配置对象失败,则不会.事实上,也有一些情况下,你真的希望能够-例如,要求ToArray在MemoryStream它的配置之后是好的,即使你不能打电话Read等.可以在写操作的情况下非常方便的MemoryStream从链一个包装器,它将处理MemoryStream,但你想要的数据.
但一般情况下,您应该编写代码,好像在处理后不能使用已处置的对象,除非您确定它仍然支持您需要的操作.默认位置"我希望它会破..."是一个安全的位置.