Ich habe die folgende Klasse und den Delegaten im Code definiert (viele andere Zeilen wurden aus Platzgründen abgekürzt).Kein Fehler, wenn die Delegiertensignatur nicht übereinstimmt
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
Wenn ich eine neue Instanz der Timer mit dem folgenden Code erstellen, ich habe nicht einen Compiler-Fehler, obwohl die Signatur der anonymen Funktion nicht die Unterschrift des Delegierten überein (es fehlt das " als boolescher "param" abgebrochen.
Dim timer As New Timer(Me.CookTime, Sub()
Dim cooked As FoodBase = CType(Activator.CreateInstance(SuccessfulResult), FoodBase)
player.GetBackpack.AddItem(cooked)
End Sub)
erwarte ich einen Compiler-Fehler zu erhalten, wenn der Timer auf diese Weise instanziiert wird, kann mir jemand erklären, warum es ohne Fehler kompiliert? Gibt es irgendwelche Optionen, die ich einstellen kann, damit es einen Kompilierungsfehler erzeugt? Ich habe Option explizit aktiviert, Option strict on und Option abl in den Projekteigenschaften. So wie es ist, ist es viel zu einfach, das abgebrochene Argument zu vergessen.
Ist es nicht wichtig, das Argument für TimerCallback stark einzugeben, um sicherzustellen, dass die Methodensignatur übereinstimmt? Ich könnte dieses Verhalten möglicherweise sehen, wenn Option Infer auf On gesetzt wäre. Aber wenn ich Option Iner Off einstelle, würde ich erwarten, dass der Compiler nichts ableitet und die Signatur durchsetzt. Gibt es Lösungen für den zweiten Teil meiner Frage, ob der Compiler in dieser Situation einen Fehler oder zumindest eine Warnung generieren soll? –