Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von punkt.
ByVal ByRef - Unterschiede?
Hallo,
was ist der Unterschied zwischen den Schlüselwörtern ByVal und Byref; bzw. macht es einen Unterschied ob ich das eine oder das andere(Schlüsselwort) benutze?
Das eine ist eine Referenz. Es wird die Adresse des Elements übergeben. Bei ByVal wird eine Kopie des Elements angelegt.
VB.NET-Quellcode
Sub bla(ByRef eins AsInteger, ByVal zwei AsInteger)
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „punkt“ ()
Eine Variable, die du byVal (by Value) übergibst, kannst du in diesem Unterprogramm ändern. Es wirkt sich nicht auf die übergebene Variable aus. Wenn du eine Variable byRef (by Reference) weitergibst, hat jede Änderung auch die Änderung der übergebenen Variable zur Folge.
hier nochmal ein Link bie dem es mit anderen Worten beschrieben ist: vb-tec.de
Das ist doch ein mehr oder weniger gravierender Unterschied!
Danke @ der Kurt
Na schau mal an da progge ich schon seit jahren, auch mit byval und so und habe nie den unterschied gekannt, bzw. mal hinterfragt *g* ich habe einfach einmal als och Sub und Funktionen gelernt habe ByVal gesehen und es seitdem immer benutzt. Wobei ich auch schon fertige Funktionen genutzt habe, wo ein Aufruf ohne Rückgabe war und die übergebene Variable war danach anders. Habe mich immer gefragt wie man sowas wohl macht. Aber ich habe es noch nie gebraucht.
Aber jetzt sehe ich das ich lieber ByRef als Standard nehmen sollte, weil ich bisher immer davon ausging übergebene Vars werden nur in der Funktion selber verwendet *g*
Hallo Dodo,
ich denke byRef als Standard zu nehmen kann auch gefährlich sein.
Wo du es aber immer wieder mal siehst ist bei den Api's
Eine Funktion die mehr als einen Parameter zurückgibt, kann man natürlich durch byRef verwirklichen.
Man kann in C++ Variablen ByRef übergeben und mit einem Zusatz aber festlegen, dass die Werte innerhalb der Funktion/Procedure nicht geändert werden. Wenn doch , wirft er einen Fehler (vergleichbar mit Strict On)
das sah dann irgendwie so aus:
Quellcode
Int bla(const int *t)
was in vb.net soviel heisst wie
VB.NET-Quellcode
Sub Bla(RyRef t AsInteger) AsInteger
Bloß eben das die Zusicherung fehlt.
Gibt es sowas nicht in vb.net?