Porady: przeciążanie procedury wykorzystującej parametry opcjonalne (Visual Basic)
Jeśli procedura ma co najmniej jeden parametr opcjonalny , nie można zdefiniować przeciążonej wersji zgodnej z żadnym z jej niejawnych przeciążeń. Aby uzyskać więcej informacji, zobacz sekcję "Niejawne przeciążenia parametrów opcjonalnych" w temacie Zagadnienia dotyczące przeciążania procedur.
Jeden opcjonalny parametr
Aby przeciążyć procedurę, która przyjmuje jeden opcjonalny parametr
Napisz instrukcję
Sub
orFunction
deklaracji, która zawiera opcjonalny parametr na liście parametrów. Nie używaj słowa kluczowegoOptional
w tej przeciążonej wersji.Poprzedzić słowo
Sub
kluczowe orFunction
za pomocą słowa kluczowego Przeciążenia .Napisz kod procedury, który powinien zostać wykonany, gdy kod wywołujący dostarcza opcjonalny argument.
W razie potrzeby zakończ procedurę instrukcją
End Sub
orEnd Function
.Napisz drugą instrukcję deklaracji, która jest identyczna z pierwszą deklaracją, z tą różnicą, że nie zawiera opcjonalnego parametru na liście parametrów.
Napisz kod procedury, który powinien zostać wykonany, gdy kod wywołujący nie dostarcza opcjonalnego argumentu. W razie potrzeby zakończ procedurę instrukcją
End Sub
orEnd Function
.W poniższym przykładzie przedstawiono procedurę zdefiniowaną z opcjonalnym parametrem, równoważnym zestawem dwóch przeciążonych procedur, a w końcu przykładami zarówno nieprawidłowych, jak i prawidłowych przeciążonych wersji.
Sub q(ByVal b As Byte, Optional ByVal j As Long = 6)
' The preceding definition is equivalent to the following two overloads. ' Overloads Sub q(ByVal b As Byte) ' Overloads Sub q(ByVal b As Byte, ByVal j As Long)
' Therefore, the following overload is not valid because the signature is already in use. ' Overloads Sub q(ByVal c As Byte, ByVal k As Long) ' The following overload uses a different signature and is valid. Overloads Sub q(ByVal b As Byte, ByVal j As Long, ByVal s As Single)
Wiele parametrów opcjonalnych
W przypadku procedury z więcej niż jednym opcjonalnym parametrem zwykle potrzebujesz więcej niż dwóch przeciążonych wersji. Jeśli na przykład istnieją dwa parametry opcjonalne, a kod wywołujący może podać lub pominąć każdy z nich niezależnie od siebie, potrzebne są cztery przeciążone wersje, po jednym dla każdej możliwej kombinacji podanych argumentów.
Wraz ze wzrostem liczby parametrów opcjonalnych zwiększa się złożoność przeciążenia. Chyba że niektóre kombinacje podanych argumentów nie są dopuszczalne, w przypadku N parametrów opcjonalnych potrzebujesz 2 ^ N przeciążonych wersji. W zależności od charakteru procedury można stwierdzić, że jasność logiki uzasadnia dodatkowy wysiłek definiowania wszystkich przeciążonych wersji.
Aby przeciążyć procedurę, która przyjmuje więcej niż jeden opcjonalny parametr
Określ, które kombinacje podanych opcjonalnych argumentów są dopuszczalne dla logiki procedury. Może wystąpić niedopuszczalna kombinacja, jeśli jeden opcjonalny parametr zależy od innego. Jeśli na przykład jeden parametr akceptuje imię i nazwisko osoby, a inny akceptuje wiek osoby, kombinacja argumentów dostarczających wiek, ale pominięcie nazwy jest niedopuszczalne.
Dla każdej dopuszczalnej kombinacji dostarczonych opcjonalnych argumentów napisz instrukcję
Sub
orFunction
deklaracji, która definiuje odpowiednią listę parametrów. Nie używaj słowa kluczowegoOptional
.W każdej deklaracji poprzedzić
Sub
słowo kluczowe orFunction
za pomocą słowa kluczowego Przeciążenia .Po każdej deklaracji napisz kod procedury, który powinien zostać wykonany, gdy kod wywołujący dostarcza listę argumentów odpowiadającą liście parametrów tej deklaracji.
W razie potrzeby zakończ każdą procedurę za pomocą instrukcji
End Sub
orEnd Function
.
Zobacz też
- z konkretnym obiektem
- Parametry i argumenty procedur
- Parametry opcjonalne
- Tablice parametrów
- Przeciążanie procedury
- Rozwiązywanie problemów z procedurami
- Instrukcje: definiowanie wielu wersji procedury
- Instrukcje: wywoływanie procedury przeciążenia
- Instrukcje: przeciążanie procedury korzystającej z nieokreślonej liczby parametrów
- Rozpoznanie przeciążenia