c# - 继承IDisposable 没有东西可以处理怎么办?

标签 c# .net idisposable

IEnumerator<T> 继承 IDisposable 我必须实现 Dispose 即使我没有什么可处理的。我还应该走过场吗?

public sealed class NothingEnumerator<T> : IEnumerator<T>
{
    private bool disposed;

    public object Current
    {
        get
        {
            if (disposed) throw new ObjectDisposedException("NothingEnumerator");
            return default(T);
        }
    }

    public void Dispose()
    {
        disposed = true;
    }

    public bool MoveNext()
    {
        if (disposed) throw new ObjectDisposedException("NothingEnumerator");
        return false;
    }

    public void Reset()
    {
        if (disposed) throw new ObjectDisposedException("NothingEnumerator");
    }
}

还是不行?

public sealed class NothingEnumerator<T> : IEnumerator<T>
{
    public object Current
    {
        get { return default(T); }
    }

    public void Dispose()
    {
    }

    public bool MoveNext()
    {
        return false;
    }

    public void Reset()
    {
    }
}

换句话说,“处置”对象必须扔掉吗?

最佳答案

只有当调用者试图执行因对象已被释放而无法执行的操作时,才应抛出异常。如果他们尝试执行的操作即使在对象被释放后也能正常工作,则没有理由抛出。

当然,如果您 throw ,当然欢迎您。这是你在一天结束时的决定,但是,与方法/属性依赖于不再存在的资源的情况不同,不再有几乎强制你的理由扔。

关于c# - 继承IDisposable 没有东西可以处理怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27427982/

相关文章:

c# - 如何识别 URL 的身份验证类型?

c# - C# 中的局部静态变量?

c# - 当结果实现 IDisposable 时丢弃异步结果

c# - 是否可以强制类型参数在类上可以为空

c# - Visual Studio 文件选择器

c# - X 轴上带有日期和时间的折线图

c# - 如何在后面的代码中设置 TabControl 的 Horizo​​ntalAlignment

.net - 如何序列化 .NET 表适配器

c# - 关于继承IDisposable的细节?

c# - 关闭 using block 中的连接