Call by value/reference

Hallo zusammen,

ich grüble gerade etwas vor mich hin… von Call by value oder reference spricht man ja in der Regel bei der Parameterübergabe in Funktionen bzw. Methoden. Jetzt entwickle ich gerade so vor mich hin (in C#) und übergebe den Inhalt einer Liste an eine andere.

Wenn ich nun schreibe:

List a = sourceList;
soureList.clear();

…sind beide Listen geleert. Erst wenn ich folgendes angebe:

List a = sourceList.toList();
soureList.clear();

… behält die a-Liste ihre Werte unabhängig von der Quellliste.

Jetzt meine Frage:
Kann man dabei ebenfalls von einer Unterscheidung in call by value oder reference reden oder gibt es hierfür eine eigene Bezeichnung? Denn offenbar greift der erste Part direkt auf die Quell-List-Memory zu (reference), währed beim zweiten Part die Werte direkt übergeben werden. Mir geht es also rein um die formale Bezeichnung dieser unterschiedlichen Ansätze.

Danke für eure Meinungen.

Gruß, Leebo

Hallo!
Eine entsprechende Unterscheidung gibt es auch bei C# (.NET allgemein).
Die unterschiedlichen Typenklassen werden dabei als „Wertetypen“ und „Referenztypen“ bezeichnet.
Wertetypen sind die skaleren Datentypen (int, char, …) sowie structs.
Referenztypen sind Klassen.

In Deinem Beispiel: List ist ein Referenztyp. Damit weist Du a im ersten Fall nur die Referenz auf die Liste zu. In der nächsten Zeile löscht Du die (eine existierende) Liste.

Im zweiten Fall erzeugt ToList() eine neue Instanz einer Liste und kopiert die Einträge der Ausgangsliste da rein.

Insofern hat Dein Beispiel nichts mit Referenz- vs. Wertetypen zu tun, Du hantierst dort immer mit Referenztypen.

Gruß,
Martin

Hallo Martin,

danke, das hat mich auf die richtige Fährte gebracht.

Gruß, Leebo