Finalizer可以使用字符串成员吗?

时间:2013-06-27 07:43:02

标签: c# .net dispose finalizer

我有这样的代码:

~MyClass() {
    try {
        if (Database.Exists(_connectionString))
        {
            Database.Delete(_connectionString);
        }
    } catch { }
}

Database是实体框架的静态类,而_connectionString是由ctor设置的private readonly string。这个想法是,如果有人忘了Dispose the class,我们仍然清理状态(在我的情况下,这是集成测试的一部分,如果测试中有未处理的异常,测试运行器不会调用Dispose,所以它不是我可以解决我的问题)

但是,终结者通常不应该调用类成员,因为它们可能已被处理掉了,所以如果我最终遇到已经收集_connectionString的情况,我可能会遇到问题。

有没有办法安全地执行此操作(例如,使用某种GC.KeepAlive构造?)

1 个答案:

答案 0 :(得分:0)

修改

正如所指出的,以下不是这个问题的直接答案....

是的,访问成员变量是安全的(在这个特定的例子中 - 假设连接字符串是一个字符串),另外我建议你查看IDisposable模式。

<强>原始

您应该实施IDisposable 模式

http://msdn.microsoft.com/en-us/library/system.idisposable.aspx

这将确保始终调用Dispose方法,并且您可以安全地访问成员变量。