Tôi có lớp và ủy nhiệm sau được xác định trong mã (nhiều dòng khác bị tách ra để ngắn gọn).Không có lỗi khi chữ ký ủy quyền không khớp với
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
Khi tôi tạo ra một thể hiện mới của bộ đếm thời gian với đoạn mã sau, tôi không nhận được một lỗi biên dịch, mặc dù chữ ký của chức năng ẩn danh không khớp với chữ ký của các đại biểu (nó thiếu " bị hủy như tham số boolean "".
Dim timer As New Timer(Me.CookTime, Sub()
Dim cooked As FoodBase = CType(Activator.CreateInstance(SuccessfulResult), FoodBase)
player.GetBackpack.AddItem(cooked)
End Sub)
Tôi hy vọng sẽ gặp phải lỗi biên dịch khi tạo bộ hẹn giờ theo cách này, bất kỳ ai có thể giải thích lý do tại sao lại biên dịch mà không có lỗi? Có bất kỳ tùy chọn tôi có thể thiết lập mà sẽ gây ra nó để tạo ra một lỗi biên dịch? Tôi có tùy chọn rõ ràng, tùy chọn nghiêm ngặt và tùy chọn suy ra trong thuộc tính dự án. Vì nó là, nó là quá dễ dàng để quên bao gồm các đối số bị hủy bỏ.
Không phải là điểm đánh mạnh đối số vào TimerCallback để đảm bảo rằng chữ ký phương thức khớp với nhau? Tôi có thể thấy hành vi này nếu Option Infer được đặt thành On. Nhưng bằng cách thiết lập tùy chọn Infer Off tôi mong đợi trình biên dịch sẽ không suy ra bất cứ điều gì và thực thi chữ ký. Bạn có bất kỳ giải pháp cho phần thứ hai của câu hỏi của tôi về buộc biên dịch để tạo ra một lỗi hoặc ít nhất là một cảnh báo trong tình huống này? –