[ Pobierz całość w formacie PDF ]
nizmem powinien wyjaśnić poniższy przykład. Warto porównać ten fragment kodu z podob-
nym fragmentem, w którym zastosowano słowo kluczowe ByVal:
Public Class DataClass
Public DataMember As Integer
End Class
Public Class CodeClass
Public Sub ParentRoutine( )
102 | Rozdział 4. Zmienne i typy danych
Dim sourceValue As New DataClass
sourceValue.DataMember = 5
ChildRoutine(sourceValue)
MsgBox(sourceValue.DataMember) ' --> Wyświetla 15
End Sub
Public Sub ChildRoutine(ByRef incoming As DataClass)
' ----- Poniższy wiersz zmienia rzeczywistą składową.
incoming.DataMember = 10
' ----- Poniższe wiersze całkowicie zastępują egzemplarz wskazywany
' przez zmienną obiektową sourceValue.
incoming = New DataClass
incoming.DataMember = 15
End Sub
End Class
Stosowanie parametrów przekazywanych przez referencję łącznie z referencyjnymi typami
danych umożliwia procedurom docelowym zastępowanie oryginalnych obiektów zupełnie
nowymi egzemplarzami właściwych klas.
Argumenty opcjonalne
Język Visual Basic obsługuje parametry opcjonalne za pośrednictwem słowa kluczowego
Optional:
Sub Calculate(Optional ByVal silent As Boolean = False)
W przypadku wszystkich parametrów opcjonalnych ma zastosowanie następująca para reguł:
" Każda deklaracja argumentu opcjonalnego musi obejmować wartość domyślną, która do-
datkowo musi mieć postać wyrażenia stałego (w żadnym razie nie może być zmienną).
Wartość domyślna jest wykorzystywana tylko wtedy, gdy kod wywołujący nie dostarcza
argumentu dla parametru opcjonalnego.
" Każdy parametr zadeklarowany po parametrze opcjonalnym także musi być opcjonalny.
Oznacza to, że ewentualne parametry obowiązkowe (nieopcjonalne) muszą się znajdo-
wać na liście parametrów przed parametrami opcjonalnymi.
W wersjach Visual Basica sprzed wprowadzenia technologii .NET istniała możliwość rezygnacji
z wartości domyślnej i jeśli typem parametru był Variant stosowania funkcji IsMissing do
określania, czy odpowiednia wartość została przekazana. Opisane rozwiązanie nie jest obsłu-
giwane w platformie .NET, zatem dla wszystkich parametrów opcjonalnych koniecznie mu-
simy definiować wartości domyślne (na wypadek braku odpowiednich argumentów).
Tablice parametrów
W normalnych warunkach definicja procedury określa stałą liczbę parametrów. Programiści
Visual Basica mają jednak do dyspozycji słowo kluczowe ParamArray (od ang. parameter array
tablica parametrów), za pośrednictwem którego można rozszerzać listę parametrów poza stały
zbiór elementów. Każde wywołanie tak zdefiniowanej procedury może zawierać inną liczbę
parametrów (oczywiście oprócz puli parametrów wymaganych).
Przeanalizujmy przykład funkcji wyznaczającej średnią ocenę z egzaminów, których liczba
nie jest znana (liczba ocen wejściowych w każdym wywołaniu może być inna):
Parametry i argumenty | 103
Public Function AverageScore(ByVal ParamArray scores( ) _
As Single) As Single
' ----- Oblicza średnią ocenę dla dowolnej liczby egzaminów.
Dim counter As Integer
AverageScore = 0
For counter = 0 To UBound(scores)
AverageScore += scores(counter)
Next counter
AverageScore /= UBound(scores) + 1
End Function
Wywołania funkcji AverageScore mogą teraz zawierać zróżnicowaną liczbę argumentów:
MsgBox(AverageScore(1, 2, 3, 4, 5)) ' --> Wyświetla 3
MsgBox(AverageScore(1, 2, 3)) ' --> Wyświetla 2
Poniżej przedstawiono reguły, które mają zastosowanie w przypadku parametrów deklarowa-
nych ze słowem kluczowym ParamArray:
" Procedura może otrzymywać na wejściu tylko jedną tablicę parametrów i ta tablica musi
być ostatnim elementem na liście parametrów.
" Tablica parametrów musi być przekazywana przez wartość, a jej deklaracja na liście para-
metrów procedury zawsze musi być opatrywana słowem kluczowym ByVal.
" Tablica parametrów musi być strukturą jednowymiarową. Jeśli nie zadeklarujemy jej typu,
kompilator automatycznie założy, że tablica składa się z elementów typu System.Object.
Tablica parametrów zawsze jest parametrem opcjonalnym. Jej domyślną wartością jest pusta
tablica jednowymiarowa właściwego typu danych.
104 | Rozdział 4. Zmienne i typy danych
[ Pobierz całość w formacie PDF ]