我有以下代碼中定義的類和委託(爲了簡潔起見剪切了許多其他行)。當代理簽名不匹配時沒有錯誤
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)
我希望得到一個編譯錯誤實例化計時器時這種方式,任何人都可以解釋爲什麼它沒有差錯編譯?有沒有我能設置的選項會導致它產生編譯錯誤?我有選項明確的,選項嚴格,並在項目屬性選項推斷。事實上,忘記包含取消的論點太容易了。
是不是強制鍵入參數到TimerCallback以確保方法簽名匹配?如果Option Infer設置爲On,我可能會看到這種行爲。但通過設置Option Infer Off,我希望編譯器不會推斷任何內容並強制簽名。對於我的問題的第二部分,是否有任何解決方案來強制編譯生成錯誤或至少在這種情況下發出警告? –