Udostępnij za pośrednictwem


Porady: wymuszanie przekazywania argumentu przez wartość (Visual Basic)

Deklaracja procedury określa mechanizm przekazywania. Jeśli parametr jest zadeklarowany przez element ByRef, program Visual Basic oczekuje przekazania odpowiedniego argumentu przy użyciu odwołania. Dzięki temu procedura może zmienić wartość elementu programowania bazowego argumentu w kodzie wywołującym. Jeśli chcesz chronić element bazowy przed taką zmianą, możesz zastąpić ByRef mechanizm przekazywania w wywołaniu procedury, ujęcie nazwy argumentu w nawiasach. Te nawiasy są dodatkiem do nawiasów otaczającej listę argumentów w wywołaniu.

Kod wywołujący nie może zastąpić mechanizmu ByVal .

Aby wymusić przekazanie argumentu przez wartość

  • Jeśli odpowiedni parametr jest zadeklarowany ByVal w procedurze, nie trzeba wykonywać żadnych dodatkowych kroków. Program Visual Basic oczekuje już przekazania argumentu według wartości.

  • Jeśli odpowiedni parametr jest zadeklarowany ByRef w procedurze, należy ująć argument w nawiasach w wywołaniu procedury.

Przykład

Poniższy przykład zastępuje deklarację parametru ByRef . W wywołaniu, które wymusza ByVal, zwróć uwagę na dwa poziomy nawiasów.

Sub setNewString(ByRef inString As String)
    inString = "This is a new value for the inString argument."
    MsgBox(inString)
End Sub
Dim str As String = "Cannot be replaced if passed ByVal"

' The following call passes str ByVal even though it is declared ByRef.
Call setNewString((str))
' The parentheses around str protect it from change.
MsgBox(str)

' The following call allows str to be passed ByRef as declared.
Call setNewString(str)
' Variable str is not protected from change.
MsgBox(str)

Gdy str jest ujęta w dodatkowe nawiasy na liście argumentów, setNewString procedura nie może zmienić jej wartości w kodzie wywołującym i MsgBox wyświetla komunikat "Nie można zastąpić, jeśli przekazano byval". Jeśli str nie znajduje się w nawiasach dodatkowych, procedura może ją zmienić i MsgBox wyświetla "Jest to nowa wartość argumentu inString".

Kompilowanie kodu

Po przekazaniu zmiennej przy użyciu odwołania należy użyć słowa kluczowego ByRef , aby określić ten mechanizm.

Wartością domyślną w języku Visual Basic jest przekazywanie argumentów według wartości. Jednak dobrym rozwiązaniem programistycznym jest dołączenie słowa kluczowego ByVal lub ByRef z każdym zadeklarowanym parametrem. Ułatwia to odczytywanie kodu.

Niezawodne programowanie

Jeśli procedura deklaruje parametr ByRef, poprawne wykonanie kodu może zależeć od możliwości zmiany bazowego elementu w kodzie wywołującym. Jeśli kod wywołujący zastępuje ten mechanizm wywołujący przez dołączenie argumentu w nawiasach lub jeśli przekazuje niemodyfikowalny argument, procedura nie może zmienić elementu bazowego. Może to spowodować nieoczekiwane wyniki w kodzie wywołującym.

Zabezpieczenia.NET Framework

Zawsze istnieje potencjalne ryzyko, aby umożliwić procedurze zmianę wartości bazowej argumentu w kodzie wywołującym. Przed użyciem tej wartości upewnij się, że ta wartość zostanie zmieniona i przygotuj się do sprawdzenia jej ważności.

Zobacz też