我在代码中定义了以下类和委托(为简洁起见,剪掉了许多其他行)。
Public Delegate Sub TimerCallback(canceled As Boolean)
Public Class Timer
Implements TimerManager.ITimer
Public Sub New(delay As Integer, callback As TimerCallback)
mState = TimerState.Setup
mCallback = callback
CType(TimerManager.Instance, TimerManager.ITimerManager).RegisterTimer(Me, delay)
End Sub
End Class
当我使用以下代码创建计时器的新实例时,即使匿名函数的签名与委托的签名不匹配(它缺少“取消为布尔值”参数),我也不会收到编译错误。
Dim timer As New Timer(Me.CookTime, Sub()
Dim cooked As FoodBase = CType(Activator.CreateInstance(SuccessfulResult), FoodBase)
player.GetBackpack.AddItem(cooked)
End Sub)
我希望以这种方式实例化计时器时会出现编译错误,谁能解释为什么它正在编译而没有错误?有没有我可以设置的选项会导致它产生编译错误?我在项目属性中有选项显式打开、选项严格打开和选项推断关闭。事实上,忘记包含取消的参数太容易了。