如何覆盖diposedValue为Private的Dispose方法?

时间:2010-01-11 17:13:41

标签: .net design-patterns override dispose

我必须将一些Dispose代码添加到一个继承自已实现IDisposable的类的类中,所以我尝试重写Dispose方法,但是我没有disposValue,因为它被声明为private。

如何添加新的Dispose语句?

Protected Overridable Sub Dispose(ByVal disposing As Boolean)
    If Not disposedValue Then
        If disposing Then
           ''# ...
        End If
    End If
    disposedValue = True
End Sub

提前致谢!

EXTENDED INFO:我认为我应该在继承者的基类中实现相同的逻辑。我是对的吗?

更多信息:当您声明某个类实现IDisposable时,我正在使用Vb.Net自动写入的snipet。

3 个答案:

答案 0 :(得分:2)

您可以在派生类中创建单独的disposedValue字段 但是,您应该将其命名为isDisposed

请注意,如果您两次调用Dispose,FCL中的所有类都不会执行任何操作,因此删除该逻辑并多次处置不一定有任何问题。显然,这取决于你在Dispose中所做的事情;你应该检查一下。

请务必致电MyBase.Dispose(disposing)

答案 1 :(得分:0)

不要尝试复制基类逻辑,而是调用MyBase.Dispose(disposing)。

答案 2 :(得分:-1)

嗯,它是私有而不是受保护的事实可能意味着你不应该这样做。但如果你坚持,你可以使用反射。是的,这可能是最糟糕的方式:

//(System.Reflection.BindingFlags...)
this.GetType().GetField("_privateVarName", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(this);