我有这样的代码:
~MyClass() {
try {
if (Database.Exists(_connectionString))
{
Database.Delete(_connectionString);
}
} catch { }
}
Database
是实体框架的静态类,而_connectionString
是由ctor设置的private readonly string
。这个想法是,如果有人忘了Dispose the class,我们仍然清理状态(在我的情况下,这是集成测试的一部分,如果测试中有未处理的异常,测试运行器不会调用Dispose,所以它不是我可以解决我的问题)
但是,终结者通常不应该调用类成员,因为它们可能已被处理掉了,所以如果我最终遇到已经收集_connectionString
的情况,我可能会遇到问题。
有没有办法安全地执行此操作(例如,使用某种GC.KeepAlive
构造?)
答案 0 :(得分:0)
修改强>
正如所指出的,以下不是这个问题的直接答案....
是的,访问成员变量是安全的(在这个特定的例子中 - 假设连接字符串是一个字符串),另外我建议你查看IDisposable模式。
<强>原始强>
您应该实施IDisposable 模式:
http://msdn.microsoft.com/en-us/library/system.idisposable.aspx
这将确保始终调用Dispose方法,并且您可以安全地访问成员变量。