【问题标题】: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,确保始终执行前置和后置步骤。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-09-04
        • 2015-01-23
        • 2010-11-03
        • 2014-07-18
        • 1970-01-01
        • 2021-09-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多