使用委托和调用根据某个变量调用不同的子

时间:2014-03-23 12:36:40

标签: vb.net delegates invoke

我想按如下方式组织一个类(伪代码)

Class MyClass

  sub New(MethodEnabled as integer)

   if MethodEnabled = 0
       make MyMethod() to be Sub0()
   else
       make MyMethod() to be Sub1()
   end if

  end sub


  sub MyMethod()
     invoke(either sub0  or sub1 depending on "MethodEnabled" value)
  end sub 


  sub Sub0()
    some code here
  end sub

  sub Sub1()
    some code here
  end sub

End Class

我希望让子“MyMethod()”调用(或“成为”)Sub0()或Sub1(),具体取决于类的构造方式(使用MethodEnabled = 0或MethodEnabled) = 1)。

我直观地收集到我可以通过使用委托和调用来做到这一点,但在实践中我并不清楚如何实际操作。

任何人都可以告诉我如何以最优雅的方式做到这一点。 C#的VB.NET示例同样出色。谢谢!

1 个答案:

答案 0 :(得分:2)

您需要声明委托类型或使用System.Action,然后使用该委托类型的实例:

Class [MyClass]

    Private Delegate Sub myDelegate()
    Private myDelegateInstance As myDelegate
    'or you could just leave out 'myDelegate' and use 'System.Action'

    Sub New(ByVal MethodEnabled As Integer)

        If MethodEnabled = 0 Then
            myDelegateInstance = AddressOf Sub0
        Else
            myDelegateInstance = AddressOf Sub1
        End If

    End Sub

    Sub MyMethod()
        myDelegateInstance()
    End Sub

    Sub Sub0()
        'some code here
    End Sub

    Sub Sub1()
        'some code here
    End Sub

End Class