0

我有这样的代码:

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

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

但是,终结器通常不应该调用类成员,因为它们可能已经被释放,所以如果我最终处于_connectionString已经收集的场景中,我可能会遇到问题。

有没有办法安全地做到这一点(例如,使用某种GC.KeepAlive构造?)

4

1 回答 1

0

编辑

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

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

原来的

您应该实现 IDisposable模式

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

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

于 2013-06-27T07:46:43.140 回答