轻松的委托转换和多个方法参数

时间:2015-01-22 18:54:47

标签: vb.net delegates overloading implicit-conversion

我有这段代码:

Friend Sub Main(args As String())
    Dim t1 = New Threading.Timer(AddressOf MyTimerCallback)
    Dim t2 = New Threading.Timer(AddressOf MyTimerCallback, Nothing, 0, 1000)
End Sub

Private Sub MyTimerCallback()
    'do something
End Sub

Main中第二行中的第一个arg存在编译器错误:

  

参数匹配参数'回调'缩小到System.Threading.TimerCallback'

Threading.Timer构造函数重载都将Threading.TimerCallback作为第一个参数,这是一个带有一个Object参数的委托。我理解第一行是由于Relaxed Delegate Conversion而起作用的,但是为什么它不适用于Main中的第二行,它使用具有相同第一个参数的该构造函数的另一个重载?

此外,这也有效:

Dim t3 = New Threading.Timer(New Threading.TimerCallback(AddressOf MyTimerCallback), Nothing, 0, 1000)

为什么这样做而不是Dim t2 = New Threading.Timer(AddressOf MyTimerCallback, Nothing, 0, 1000)

0 个答案:

没有答案