我在处理和最终确定之间陷入了困境.这是我的示例代码:
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()
谢谢 :)
我认为你误解了Dispose实际上做了什么.它不会破坏您的对象,将任何内容设置为null,或以其他方式执行任何类型的魔法.当您使用using语句时,这只是保证将调用Dispose.您在Dispose方法中执行的操作决定了对象的行为.不是语言或.NET框架.
| 归档时间: |
|
| 查看次数: |
489 次 |
| 最近记录: |