Ho la seguente classe e delegato definita nel codice (molte altre righe eliminate per brevità).Nessun errore quando la firma delega non corrisponde a
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
Quando creo una nuova istanza del timer con il seguente codice, non ottengo un errore di compilazione, anche se la firma della funzione anonima non corrisponde alla firma del delegato (manca il " annullato come "param" booleano.
Dim timer As New Timer(Me.CookTime, Sub()
Dim cooked As FoodBase = CType(Activator.CreateInstance(SuccessfulResult), FoodBase)
player.GetBackpack.AddItem(cooked)
End Sub)
mi aspetto di ottenere un errore di compilazione quando si crea un'istanza del timer in questo modo, qualcuno può spiegare perché sta compilando, senza un errore? Ci sono opzioni che posso impostare per produrre un errore di compilazione? Ho un'opzione esplicita on, opzione strict on e opzione dedotta nelle proprietà del progetto. Così com'è, è troppo facile dimenticare di includere l'argomento cancellato.
Non è il punto di digitare con forza l'argomento su TimerCallback per garantire che la firma del metodo corrisponda? Potrei vedere questo comportamento se Option Infer fosse impostato su On. Ma impostando Option Infer Off mi aspetto che il compilatore non deduca nulla e imponga la firma. Avete qualche soluzione alla seconda parte della mia domanda su come forzare la compilazione a generare un errore o almeno un avvertimento in questa situazione? –