Referenz oder Kopie

Hi zusammen,
ich als alter C’ler stehe gerade ein wenig verwirrt vor C# und zwar:
Gibt es eine Faustregel wann und ob C# Referenzen verwendet und wann kopiert wird?
Soweit ich das verstanden habe, wird bei Parameterübergabe immer copy by value gemacht, ausser man schreibt ref oder out davor. Allerdings hat mir jetzt irgendjemand gesagt, dass Objekte die Objekte enthalten zwar kopiert werden, aber die Objekte die in den Objekten sind referenziert sind *sehr verwirrt schau*.
Also z.B.
Hashlist hash = new Hashlist();
string test = „testValue“;
hash.Add(„testValue“, test);
object.CallFunktion(hash);
dann wäre nach oben genannter These in CallFunktion hash’ eine Kopie von has, test’ aber eine referenz auf test???

Und dann noch etwas:
Wenn ich ein Objekt erzeuge und dem Objekt ein weiteres hinzufüge wird dann ein neues Objekt erzeugt und dem anderen hinzugefügt, oder die Referenz auf das Objekt?
z.B. das oben genannte Beispiel.
Befindet sich eine Kopie des Stringobjekt „test“ in der Hashtable, oder nur eine Referenz auf „test“??

Ich hoffe das war jetzt nicht zu sehr verwirrend, aber ich hab nirgendwo ein brauchbares Beispiel gefunden.
Wie sehr trauer ich doch den Pointern hinterher, da wusste man wenigstens was man macht :wink:

vielen dank schon mal
grüße
/silvl

Hallo!

Eigentlich ganz einfach:
Es gibt Werttypen und Referenztypen.
Werttypen sind die Basistypen wie int, float, string, bool sowie alle struct s.
Referenztypen sind alle Klassen.

Werttypen werden normalerweise by value übergeben, Referenztypen by reference.

„Normalerweise“ deswegen, weil man in bestimmten Situationen auch Werttypen als Parameter für Methoden übergeben kann, die eigentlich einen Referenztypen erwarten. Dann wird der Werttyp implizit in ein object’eingepackt’ (das betreffende Fachwort hierfür ist „boxing“), was je nach Situation einiges an Performance kosten kann.

Jetzt etwas klarer?

Gruß,
Martin

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Jetzt etwas klarer?

Ja, ich denke schon!
Danke für die Erklärung :smile: Damit kann ich was anfangen!

Viele Grüße
/silvl