【发布时间】:2010-05-20 07:53:28
【问题描述】:
考虑以下代码:
namespace DisposeTest
{
using System;
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Calling Test");
Test();
Console.WriteLine("Call to Test done");
}
static void Test()
{
DisposeImplementation di = new DisposeImplementation();
}
}
internal class DisposeImplementation : IDisposable
{
~DisposeImplementation()
{
Console.WriteLine("~ in DisposeImplementation instance called");
}
public void Dispose()
{
Console.WriteLine("Dispose in DisposeImplementation instance called");
}
}
}
Dispose 永远不会被调用,即使我在 Test(); 调用之后放置了一个等待循环。所以这很糟糕。我想编写一个简单易用的类,以确保清理所有可能的资源。我不想把这个责任推给我班级的用户。
可能的解决方案:使用using,或者自己调用Dispose(基本一样)。我可以强制用户使用 using 吗?或者我可以强制调用 dispose 吗?
在Test(); 之后调用GC.Collect(); 也不起作用。
将di 放入null 也不会调用 Dispose。 Deconstructor 可以工作,所以对象在退出时会被解构Test()
好的,伙计们,现在很清楚了!
谢谢大家的回答!我将在评论中添加警告!
【问题讨论】:
标签: c# .net garbage-collection dispose idisposable