我有一个主类,它有一个没有实现的Sub过程。任何派生类都应该覆盖并实现此过程,因此我在基类中使用了MustOverride。
现在,每次调用此过程时,我都需要在过程开始时将特定的布尔变量设置为True,并在结束时将其设置为False。
有没有办法避免在每个派生类的过程实现中编写这两行代码?我可以在基类中将此值设置为True,然后在派生类中运行过程,然后将值设置回基类中吗?
提前谢谢。
答案 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()