Przeciążanie procedury (Visual Basic)
Przeciążenie procedury oznacza zdefiniowanie jej w wielu wersjach przy użyciu tej samej nazwy, ale różnych list parametrów. Celem przeciążenia jest zdefiniowanie kilku ściśle powiązanych wersji procedury bez konieczności rozróżniania ich według nazwy. Można to zrobić, zmieniając listę parametrów.
Przeciążanie reguł
Podczas przeciążenia procedury obowiązują następujące reguły:
Ta sama nazwa. Każda przeciążona wersja musi używać tej samej nazwy procedury.
Inny podpis. Każda przeciążona wersja musi się różnić od wszystkich innych przeciążonych wersji w co najmniej jednej z następujących kwestii:
Liczba parametrów
Kolejność parametrów
Typy danych parametrów
Liczba parametrów typu (dla procedury ogólnej)
Zwracany typ (tylko dla operatora konwersji)
Wraz z nazwą procedury powyższe elementy są zbiorczo nazywane podpisem procedury. Podczas wywoływania przeciążonej procedury kompilator używa podpisu, aby sprawdzić, czy wywołanie jest poprawnie zgodne z definicją.
Elementy nie są częścią podpisu. Nie można przeciążyć procedury bez zmiany podpisu. W szczególności nie można przeciążyć procedury, zmieniając tylko jeden lub więcej następujących elementów:
Słowa kluczowe modyfikatora procedury, takie jak
Public
,Shared
iStatic
Nazwy parametrów lub typów
Ograniczenia parametrów typu (dla procedury ogólnej)
Słowa kluczowe modyfikatora parametrów, takie jak
ByRef
iOptional
Czy zwraca wartość
Typ danych zwracanej wartości (z wyjątkiem operatora konwersji)
Elementy na powyższej liście nie są częścią podpisu. Chociaż nie można ich używać do rozróżniania przeciążonych wersji, można je różnić w zależności od przeciążonych wersji, które są prawidłowo rozróżniane przez ich sygnatury.
Argumenty związane z późnym opóźnieniem. Jeśli zamierzasz przekazać zmienną obiektu z późną granicą do przeciążonej wersji, należy zadeklarować odpowiedni parametr jako Object.
Wiele wersji procedury
Załóżmy, że piszesz procedurę Sub
publikowania transakcji względem salda klienta i chcesz mieć możliwość odwoływania się do klienta według nazwy lub numeru konta. Aby to uwzględnić, można zdefiniować dwie różne Sub
procedury, jak w poniższym przykładzie:
Sub postName(ByVal custName As String, ByVal amount As Single)
' Insert code to access customer record by customer name.
End Sub
Sub postAcct(ByVal custAcct As Integer, ByVal amount As Single)
' Insert code to access customer record by account number.
End Sub
Wersje przeciążone
Alternatywą jest przeciążenie pojedynczej nazwy procedury. Możesz użyć słowa kluczowego Przeciążenia, aby zdefiniować wersję procedury dla każdej listy parametrów w następujący sposób:
Overloads Sub post(ByVal custName As String, ByVal amount As Single)
' Insert code to access customer record by customer name.
End Sub
Overloads Sub post(ByVal custAcct As Integer, ByVal amount As Single)
' Insert code to access customer record by account number.
End Sub
Dodatkowe przeciążenia
Jeśli chcesz również zaakceptować kwotę transakcji w elemecie Decimal
lub Single
, możesz jeszcze bardziej przeciążyć post
, aby zezwolić na tę odmianę. Jeśli wykonasz to do każdego przeciążenia w poprzednim przykładzie, będziesz mieć cztery Sub
procedury, wszystkie o tej samej nazwie, ale z czterema różnymi podpisami.
Zalety przeciążenia
Zaletą przeciążenia procedury jest elastyczność wywołania. Aby użyć post
procedury zadeklarowanej w poprzednim przykładzie, kod wywołujący może uzyskać identyfikację klienta jako String
element lub Integer
, a następnie wywołać tę samą procedurę w obu przypadkach. Zostało to przedstawione w poniższym przykładzie:
Imports MSVB = Microsoft.VisualBasic
Dim customer As String
Dim accountNum As Integer
Dim amount As Single
customer = MSVB.Interaction.InputBox("Enter customer name or number")
amount = MSVB.Interaction.InputBox("Enter transaction amount")
Try
accountNum = CInt(customer)
Call post(accountNum, amount)
Catch
Call post(customer, amount)
End Try
Zobacz też
- z konkretnym obiektem
- Instrukcje: definiowanie wielu wersji procedury
- Instrukcje: wywoływanie procedury przeciążenia
- Instrukcje: przeciążanie procedury korzystającej z parametrów opcjonalnych
- Instrukcje: przeciążanie procedury korzystającej z nieokreślonej liczby parametrów
- Zagadnienia dotyczące przeciążania procedur
- Rozpoznanie przeciążenia
- Overloads
- Typy ogólne w Visual Basic