ByVal ByRef - Unterschiede?

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von punkt.

    Das eine ist eine Referenz. Es wird die Adresse des Elements übergeben. Bei ByVal wird eine Kopie des Elements angelegt.

    VB.NET-Quellcode

    1. Sub bla(ByRef eins As Integer, ByVal zwei As Integer)
    2. eins = 11
    3. zwei = 22
    4. Console.WriteLine("zahl1: {0} zahl2: {1}", eins, zwei)
    5. End Sub
    6. Sub Main()
    7. Dim zahl1 As Integer = 1
    8. Dim zahl2 As Integer = 2
    9. Console.WriteLine("zahl1: {0} zahl2: {1}", zahl1, zahl2)
    10. bla(zahl1, zahl2)
    11. Console.WriteLine("zahl1: {0} zahl2: {1}", zahl1, zahl2)
    12. End Sub

    Ausgabe:
    zahl1: 1 zahl2: 2
    zahl1: 11 zahl2: 22
    zahl1: 11 zahl2: 2

    ... denke/hoffe ich zumindest

    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.
    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.

    Gruss

    mikeb69

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „mikeb69“ ()

    mit byReference wird nur ein Zeiger auf die übergebene Variable übergeben, bei byValue wird eine neue angelegt und der Inhalt kopiert.
    Gruß, Agent Smith 8-)

    activeFlags = (lazy OR weary)

    Lemgo-Verschwörung | Mathematics | VB-Paradise in blau
    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

    1. Int bla(const int *t)

    was in vb.net soviel heisst wie

    VB.NET-Quellcode

    1. Sub Bla(RyRef t As Integer) As Integer

    Bloß eben das die Zusicherung fehlt.
    Gibt es sowas nicht in vb.net? ?(