C#Dispose:处置时和处理它

hqt*_*hqt 2 c# dispose

我在处理和最终确定之间陷入了困境.这是我的示例代码:

public class Car:IDisposable
    {
        public string name;
        public Car()
        {
            name = "My Car";
        }
        public void Dispose()
        {
            Console.WriteLine("This object has been disposed");
        }
    }
public static void Main()
        {
            Car anotherCar;
            using (var car = new Car())
            {
                anotherCar = car;
                Console.WriteLine("Before dispose. Name is: "+anotherCar.name);
            }

            Console.WriteLine("After dispose. Name is: "+anotherCar.name);

        }
Run Code Online (Sandbox Code Playgroud)

结果是:

Before dispose. Name is My Car
This object has been disposed
After dispose. Name is My Car
Run Code Online (Sandbox Code Playgroud)

我的问题是:因为C#会在之后自动处理对象using{},所以我想在"After dispose"之后.anotherCar.name必须为NULL.为什么它仍然是"我的车"?

我的另一个问题是:我的书说你不应该GC.Collect()出于某种原因而使用其中一个是性能.那么,谁处置对象?如果那是垃圾收集器,我认为dipose()也有相同的性能问题finalizer()

谢谢 :)

Jim*_*elo 5

我认为你误解了Dispose实际上做了什么.它不会破坏您的对象,将任何内容设置为null,或以其他方式执行任何类型的魔法.当您使用using语句时,这只是保证将调用Dispose.您在Dispose方法中执行的操作决定了对象的行为.不是语言或.NET框架.