相关疑难解决方法(0)

完成vs Dispose

为什么有些人在Finalize方法上使用该Dispose方法?

在什么情况下你会使用Finalize方法而不是Dispose方法,反之亦然?

c# dispose

207
推荐指数
8
解决办法
13万
查看次数

仅限受管资源的最小IDisposable implimenation

IDisposable关于处理非托管资源的"标准完整" 实现有很多信息- 但实际上这种情况非常罕见(大多数资源已经被托管类包装).这个问题集中在更常见的"仅限托管资源"案例的IDisposable的最小实现上.

1:IDisposable下面的代码中的mimimal实现是否正确,是否存在问题?

2:是否有任何理由增加一个完整的标准IDisposable执行(Dispose(),Dispose(bool),Finalizer等)在最小的执行力度呈现的?

3:在这个极小的情况下,制作Dispose虚拟(因为我们没有提供Dispose(bool))是否可行/明智?

4:如果这个最小的实现被一个包含(在这种情况下是无用的)终结器的完整标准实现替换 - 这会改变GC处理对象的方式吗?有什么缺点吗?

5:示例包括Timer与事件处理程序,因为这些情况下,尤其重要的是不能错过的无法处理它们会保持对象活蹦乱跳(this在的情况下Timer,eventSource在事件处理程序的情况下),直到GC得到轮在释放他们是时候了.还有其他这样的例子吗?

class A : IDisposable {
    private Timer timer;
    public A(MyEventSource eventSource) {
        eventSource += Handler
    }

    private void Handler(object source, EventArgs args) { ... }

    public virtual void Dispose() {
        timer.Dispose();
        if (eventSource != null)
           eventSource -= Handler;
    }
}

class B : A, IDisposable {
    private …
Run Code Online (Sandbox Code Playgroud)

c# dispose idisposable

11
推荐指数
1
解决办法
1362
查看次数

为什么Dispose()不处置托管资源而终结器呢?

我们都知道System.IDisposable模式。在StackOverflow上已经描述了无数的时间:

链接:Dispose()用于清理托管资源?

Disposable模式建议仅在处置对象时才处置托管资源,而不是在完成过程中处置

您可以看到这是因为建议使用以下代码:

protected void Dispose(bool disposing)
{
    if (disposing)
    {
        // Code to dispose the managed resources of the class
    }
    // Code to dispose the un-managed resources of the class
 }
Run Code Online (Sandbox Code Playgroud)

我知道,只要我的班级具有实现System.IDisposable的(私有)成员,我的班级就应该实现System.IDisposable。如果布尔处理为true,则Dispose(bool)应调用私有成员的Dispose()。

如果在完成过程中调用Dispose,为什么会出现问题?那么,如果在完成过程中调用以下Dispose会导致问题呢?

protected void Dispose(bool disposing)
{
    if (myDisposableObject != null)
    {
        myDisposableObject.Dispose();
        myDisposableObject = null;
    }
 }
Run Code Online (Sandbox Code Playgroud)

.net c# dispose idisposable disposable

5
推荐指数
1
解决办法
1499
查看次数

标签 统计

c# ×3

dispose ×3

idisposable ×2

.net ×1

disposable ×1