覆盖VB.NET中的Sub过程

时间:2010-09-17 21:24:12

标签: vb.net class inheritance override

我有一个主类,它有一个没有实现的Sub过程。任何派生类都应该覆盖并实现此过程,因此我在基类中使用了MustOverride。

现在,每次调用此过程时,我都需要在过程开始时将特定的布尔变量设置为True,并在结束时将其设置为False。

有没有办法避免在每个派生类的过程实现中编写这两行代码?我可以在基类中将此值设置为True,然后在派生类中运行过程,然后将值设置回基类中吗?

提前谢谢。

2 个答案:

答案 0 :(得分:3)

当我遇到派生类需要覆盖方法的场景时,但是我希望在重写的方法代码之前或之后发生特定的事情,我将它分成两个方法。这样的事情(非常简化):

VB.NET版本:

Class BaseClass
    Public Sub DoWork()
        ' perform pre-steps ' 
        DoWorkImpl()
        ' perform post-steps '
    End Sub

    Protected MustOverride Sub DoWorkImpl()
End Class

派生类将覆盖DoWorkImpl,但无法从外部调用该方法,因为它是protected。只能从外部调用DoWork,确保始终执行前后步骤。

答案 1 :(得分:1)

我这样做的方法是将工作分解为2种方法。第一种方法在基类上是非虚拟的,并将负责设置Boolean值。然后它将调用第二个MustOverride方法。例如

Sub Method()
  MyValue = True
  Try 
    MethodCore()
  Finally
    MyValue = False
  End Try
End Sub

Sub MustOverride MethodCore()