Rozpoznanie przeciążenia (Visual Basic)
Gdy Visual Basic kompilatora wykryje wywołanie procedurę, która jest zdefiniowana w kilku wersjach przeciążony, kompilator należy zdecydować, który overloads do wywołania.Robi to, wykonując następujące kroki:
Ułatwienia dostępu. Eliminuje wszelkie przeciążenie z poziomu dostępu, który uniemożliwia to wywołanie kod wywołujący.
Liczba parametrów. Eliminuje wszelkie przeciążenie, definiujący szereg różnych parametrów nie są dostarczane w wywołaniu.
Typy danych parametrów. Kompilator daje preferencje metody instancji za pośrednictwem metod rozszerzenie.Jeśli dowolną metodę instancji zostanie znaleziony, który wymaga tylko poszerzenie konwersji, aby dopasować wywołanie procedury, wszystkie metody rozszerzenia są porzucane i kompilator będzie nadal występował z kandydatów metody instancji.Jeśli taka metoda instancji zostanie znaleziony, nadal z instancji i metod rozszerzenie.
W tym kroku eliminuje wszelkie przeciążenie, dla których typy danych argumentów wywołujący nie można przekonwertować na typy parametrów określonych w przeciążenie.
Konwersji zawężającej. Eliminuje wszelkie przeciążenie, która wymaga konwersji zawężającej wywołującego typy argumentów dla typów zdefiniowanych parametrów.To PRAWDA czy kontrola typów przełączyć (Option Strict — Instrukcja) jest On lub Off.
Co najmniej poszerzenia. Kompilator uzna pozostałych przeciążeniem w parach.Dla każdej pary porównuje typów danych zdefiniowanych parametrów.Jeśli w jednym z przeciążeniem wszystkie typy są rozszerzane odpowiadające im typy w innym, kompilator eliminuje te ostatnie.Oznacza to, że zachowuje przeciążenie, która wymaga co najmniej kwota poszerzenia.
Jeden kandydat. Kontynuuje ona, mając na uwadze przeciążeniem w parach, aż do tylko jeden przeciążenie pozostaje i jest rozwiązywana jako wywołanie tego przeciążenia.Jeśli kompilator nie może zmniejszyć overloads do jednego kandydata, generuje błąd.
Poniższa ilustracja pokazuje proces, który określa, który zestaw przeciążony wersje do wywołania.
Rozwiązywanie pomiędzy poszczególnymi wersjami przeciążony
Poniższy przykład ilustruje ten proces rozpoznawania przeciążenie.
Overloads Sub z(ByVal x As Byte, ByVal y As Double)
End Sub
Overloads Sub z(ByVal x As Short, ByVal y As Single)
End Sub
Overloads Sub z(ByVal x As Integer, ByVal y As Single)
End Sub
Dim r, s As Short
Call z(r, s)
Dim p As Byte, q As Short
' The following statement causes an overload resolution error.
Call z(p, q)
W pierwszym wywołaniem kompilator eliminuje pierwszy przeciążenia, ponieważ typ pierwszego argumentu (Short) umożliwia zawężenie typu odpowiedniego parametru (Byte).Następnie program eliminuje trzeciego przeciążenia, ponieważ każdy argument należy wpisać w drugim przeciążenie (Short i Single) rozszerza się do odpowiedniego typu w trzecim przeciążenie (Integer i Single).Drugi przeciążenie wymaga mniej poszerzenie tak kompilator używa go do obsługi wywołania.
W drugim wywołanie kompilator nie można wyeliminować dowolne przeciążeniem w oparciu o zwężenie.Ponieważ może wywołać drugi przeciążenie z mniej poszerzenie typy argumentów eliminuje trzeciego przeciążenie z tego samego powodu, jak w pierwszym wywołaniem.Jednak kompilator nie może rozpoznać między pierwszym i drugim overloads.Każdy ma jeden typ parametru zdefiniowanego rozszerzająca odpowiedniego typu w innym (Byte do Short, ale Single do Double).Kompilator dlatego generuje błąd rozpoznawania przeciążenie.
Przeciążone opcjonalne i argumenty ParamArray
Jeśli overloads dwie procedury mają identycznych podpisach, z wyjątkiem, że ostatni parametr jest zadeklarowany jako Optional (Visual Basic) w jednym i ParamArray (Visual Basic) w innych, kompilator usuwa wywołania do tej procedury w następujący sposób:
Jeśli wywołanie dostaw ostatni argument jako |
Kompilator usuwa wywołania przeciążenia, deklarując ostatni argument jako |
Nie wartości (pominięty argument) |
Optional |
Pojedyncza wartość |
Optional |
Dwa lub więcej wartości na liście oddzielone przecinkami |
ParamArray |
Tablica o dowolnej długości (w tym pusta tablica) |
ParamArray |
Zobacz też
Zadania
Procedury rozwiązywania problemów (Visual Basic)
Porady: definiowanie wielu wersji procedury (Visual Basic)
Porady: wywoływanie procedury przeciążenia (Visual Basic)
Porady: przeciążanie procedury wykorzystującej parametry opcjonalne (Visual Basic)
Porady: przeciążanie procedury wykorzystującej nieokreśloną liczbę parametrów (Visual Basic)
Informacje
Koncepcje
Parametry opcjonalne (Visual Basic)
Parameter — Tablice (Visual Basic)
Przeciążanie procedury (Visual Basic)