如何在某个时候强制调用方法

时间:2015-01-30 20:52:02

标签: c# dispose

我有一个实现IDisposable的对象,我想在Dispose上做一些涉及其他对象的工作。我怎么能确定这项工作已经完成。目前,处理是在if内完成的。我不能在if之外删除它吧?

注意:在MyClass实例死后,_innerObject可能会或可能会继续存在。

    private OtherClass _innerObject;
    ~MyClass()
    {
        Dispose(false);
    }

    public void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this);
    }

    private void Dispose(bool disposing)
    {
        if (_disposed)
            return;

        if (disposing)
        {
            _innerObject.DoSomeJob();
        }
        _disposed = true;
    }

3 个答案:

答案 0 :(得分:1)

对innerObject的调用是什么意思?

对于与关机相关的方法,您可以在AppDomain上使用事件(例如,ProcessExit / DomainUnload)。如果您需要清理与MyClass相关的资源,您可以采取您已采取的方法,但无法保证将调用DoSomeJob。另一种方法是启用代码分析,并在CA2000上失败。

答案 1 :(得分:1)

无法有这样的保证。 IDisposable是您可以做的最好的,但它仍然依赖于您的类型的使用者来正确处理所创建的每个实例。如果他们不这样做,那么你就无法真正做到这一点。

答案 2 :(得分:0)

阅读完评论后,我会说你可以保证在MyClass之前没有通过从CriticalFinalizerObject继承OtherClass来最终确定_innerObject。但这似乎是一些黑客攻击