none
Aus der MSDN Hotline: Copy By Reference VS. Copy By Value RRS feed

  • Allgemeine Diskussion

  •  

    Hallo zusammen,

    heute wurde uns bei der MSDN Hotline unter anderem folgende Frage gestellt:
    Können Sie mir erklären, was der Unterschied zwischen copy by reference und copy by value ist?

    Unsere Antwort bzw. unser Lösungsvorschlag darauf war:
    Den Hauptspeicher kann man sich auch als einen zweidimensionalles Array vorstellen bestehend aus Speicherzellen. 
    Diese Speicherzellen können zwei Typen von Daten enthalten, zum Einen Referenzen (Koordinaten von anderen Speicherzellen, diese sind Zahlen, deren Länge hardwarearchitekturabhängig sind) und zum Anderen konkrete Werte (Integers, Strings, ...).

    Beispiel:
    Der String "ABC" ist in der Speicherzelle 0x00214321 gespeichert.

    Copy by Reference bedeutet nun, ich kopiere die Adresse der Speicherzelle, also 0x00214321. Wenn die Operation eine Variablenzuweisung ist, dann zeigen die beiden Variablen auf dieselbe Zelle im Speicher.

    Copy by Value kopiert den Inhalt der Sppeicherzelle, also "ABC", in eine neue Speicherzelle und die beiden Variablen (bei einer Zuweisung) zeigen nach der Zuweisung auf zwei verschiedenene Zellen im Hauptspeicher.

    In C# zum Beispiel werden ReferenceTypes (Object, String, Dictionary, ...) "by Reference" kopiert (Variablenzuweisung, Parameterüberweisung, ...).
    ValueTypes (int, ushort, bool und alle structs) werden "by value" kopiert. Bei diesen kann man dieses Verhalten ändern, indem man das Schlüsselwort "ref" verwendet.

    ref kann auch mit einem ReferenceType verwendet werden. Dann koppiert man die Adresse der Speicherzelle, die als Daten die Adresse der Speicherzelle enthält (bekannt auch als "Zeiger auf Zeiger"). 

    Die direkte Arbeit mit Pointern (Zeiger, Referenzen) ist in den managed Programmiersprachen nicht wirklich möglich. Ein tiefes Verständniss dieses Konzepts ist aber trotzdem notwendig, damit man weiss, was hinter den Kulissen passiert.

    Mehr Informationen findet man auf den folgenden Adressen in MSDN Online:

    1. MSDN: Passing Parameters (C# Programming Guide)
    2. MSDN: Passing By Value or By Reference

    Viele Grüße,
    Atanas Dimitrov
    MSDN Hotline für MSDN Online Deutschland

    Disclaimer:
    Bitte haben Sie Verständnis dafür, dass wir hier auf Rückfragen gar nicht oder nur sehr zeitverzögert antworten können.
    Bitte nutzen Sie für Rückfragen oder neue Fragen den telefonischen Weg über die MSDN Hotline: http://www.msdn-online.de/Hotline 
    MSDN Hotline: Schnelle & kompetente Hilfe für Entwickler: kostenfrei!

    Es gelten für die MSDN Hotline und dieses Posting diese Nutzungsbedingungen, Hinweise zu Markenzeichen sowie die allgemein gültigen Informationen zur Datensicherheit sowie die gesonderten Nutzungsbedingungen für die MSDN Hotline.

    Mittwoch, 18. August 2010 13:52