次のクラスとデリゲートがコード内に定義されています(簡潔にするために他の多くの行が抜粋されています)。私は次のコードで、タイマーの新しいインスタンスを作成するときデリゲートの署名が一致しないときにエラーなし
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
、私は無名関数のシグネチャはそれが欠けている(デリゲートの署名と一致していなくても、コンパイルエラーを取得しないでください」ブール値 "param"として取り消されました)。
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をオフに設定すると、コンパイラが何かを推定して署名を強制することはないと思います。あなたは、この状況でエラーを生成するためにコンパイルを強制するか、少なくとも警告を出すのかという私の質問の2番目の部分に対する解決策はありますか? –