【问题标题】:Overriding a Sub procedure in VB.NET在 VB.NET 中重写 Sub 过程
【发布时间】:2011-04-13 22:33:52
【问题描述】:
我有一个主类,它有一个没有实现的 Sub 过程。任何派生类都应该重写并实现这个过程,所以我在基类中使用了 MustOverride。
现在,无论何时调用此过程,我都需要在过程开始时将特定的布尔变量设置为 True,并在结束时将其设置为 False。
有没有办法避免在每个派生类的过程实现中编写这两行代码?我可以在基类中将此值设置为 True,然后在派生类中运行过程,然后在基类中重新设置该值吗?
提前谢谢你。
【问题讨论】:
标签:
vb.net
class
inheritance
overriding
【解决方案1】:
我这样做的方法是将工作分成两种方法。第一种方法在基类上是非虚拟的,并且会负责设置Boolean 值。然后它将调用第二个MustOverride 方法。例如
Sub Method()
MyValue = True
Try
MethodCore()
Finally
MyValue = False
End Try
End Sub
Sub MustOverride MethodCore()
【解决方案2】:
当我有派生类需要重写方法的场景,但我希望在重写的方法代码之前或之后发生特定的事情,我将其拆分为两个方法。像这样(非常简化):
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,确保始终执行前置和后置步骤。