Allokation im Speicher von weitergegebenen Variablen

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 45 Antworten in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    Neu

    ErfinderDesRades schrieb:

    Ich würds allerdings ohne machen - weil je weniger Variablen desto besser
    Stichwort meinerseits: DisposeAndNullify-Extension
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Neu

    VaporiZed schrieb:


    Haudruferzappeltnoch schrieb:

    was ist wenn ich hier CreateSqlCommand aufrufe
    Dann bekommt cmd einen neuen Wert.

    Ich meinte was ist der neue Wert? Ist das Sql.cmd oder eine Kopie von Sql.cmd?

    Was bedeutet denn das ?.Dispose? Ich verstehs jetzt so als ersetzt der If Not is Nothing Then

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Haudruferzappeltnoch“ ()

    Neu

    Ja, das Fragezeichen ersetzt das If X IsNot Nothing Then
    Somit If X IsNot Nothing Then X. Dispose kann man als X?.Dispose schreiben.

    Der neue cmd-Wert ist ein neues Objekt (wahrscheinlich) mit gleichen Werten wie der cmd-Wert vorher. Damit könnte man es als Kopie bezeichnen.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Neu

    Haudruferzappeltnoch schrieb:

    cmd bekommt ja den Wert von Sql.cmd
    ?( In welcher Zeile? Das entstehende Objekt ist durch sql.cmd und den Rückgabewert bzw. die aufnehmende Variable erreichbar, weil alle Variablen auf das Objekt verweisen/zeigen. Letztenendes werden AFAIK intern Zeiger auf das eigentliche Objekt hin- und hergereicht. Das Objekt selbst ist nicht direkt fassbar.
    Also

    VB.NET-Quellcode

    1. Sub Main
    2. Dim SqlInstance = New Sql()
    3. Dim Foo = SqlInstance.CreateSqlCommand()
    4. End Sub
    5. Friend Class Sql
    6. Private con as SqlConnection
    7. Friend cmd as SqlCommand
    8. ...
    9. Friend Sub New()
    10. con = New SqlConnection(ConnString)
    11. End Sub
    12. Friend Function CreateSqlCommand() as SqlCommand
    13. cmd = New SqlCommand(SqlString, con)
    14. Return cmd
    15. End Function
    16. End Class

    Das in Zeile#15 erschaffene Objekt ist mittels Verwendung von cmd (Zeile#15) und Foo (Zeile#3) ansprechbar. Beide Variablen ermöglichen Zugriff auf das selbe Objekt. Aber effektiv werden da nur Zeiger auf das Objekt weitergereicht/kopiert. Das Objekt wird selbst nicht kopiert. Ändert man mithilfe von Foo das Objekt, ist das in cmd sofort sichtbar.

    Erklärung ausreichend oder noch unklar?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.