Небольшой пример с использованием перегрузки: это ошибка компилятора? - PullRequest
1 голос
/ 23 марта 2011

Как компилятор VB.NET в этом случае определяет, какая функция вызывается?

Мне кажется, что это должно вызвать ошибку, потому что она НЕ МОЖЕТ сказать (или, по крайней мере, так она и есть).мне кажется.)

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        MessageBox.Show(Function1("A", "B", "C", "D"))
    End Sub
    Private Overloads Function Function1(ByVal x As String, ByVal y As String, ByVal ParamArray z() As String) As String
        Return "1"
    End Function
    Private Overloads Function Function1(ByVal x As String, ByVal ParamArray z() As String) As String
        Return "2"
    End Function

End Class

Ответы [ 2 ]

1 голос
/ 23 марта 2011

Первый будет назван. В общем, компилятор предпочтет более конкретный метод, чем более общий.

Другой пример:

Class Parent
End Class

Class Child
    Inherits Parent
End Class

...

Private Overloads Sub Function1(ByRef obj As Object)
    MessageBox.Show("Object")
End Sub
Private Overloads Sub Function1(ByRef parent As Parent)
    MessageBox.Show("Parent")
End Sub
Private Overloads Sub Function1(ByRef child As Child)
    MessageBox.Show("Child")
End Sub

...

Function1(New Child())  'Displays "Child"
Function1(New Parent()) 'Displays "Parent"
Function1(10)           'Displays "Object"
Function1(DirectCast(New Parent(), Object)) 'Displays "Object"
0 голосов
/ 23 марта 2011

Функции имеют разные подписи. Тип paramarray не совпадает с типом string.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...