Я изучаю делегатов в VB.NET и запутался в типах делегатов. Читая о делегатах, я узнал, что делегаты - это тип данных, который может ссылаться на метод с определенным типом подписи. Таким же образом, как строка может ссылаться на символы, делегат может ссылаться на метод (например), который принимает целое число в качестве входных данных и возвращает целое число в качестве выходных данных. Но, играя с делегатами, я обнаружил, что это не так. Приведенный ниже код компилируется и выполняется - хотя я не подчиняюсь «печатанию» в моей подписи делегата. Я не совсем понимаю. Я что-то пропустил?
Public Delegate Function myDelegate(ByVal i As Integer) As Integer' int in, rtrn int
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim md As myDelegate 'should be of type int in, rtrn int
md = New myDelegate(AddressOf squared) 'allows assign to string in, string out
MsgBox(md("3"))
End Sub
Private Function squared(ByVal i As String) As String
Return i * i
End Function