Beginn der Reihe: Häufige Fehler in C#–Referenztypen und Werttypen

Programmierer von C++, und vieler anderer Sprachen,sind gewohnt dass sie die Kontrolle darüber haben ob Werte, welche sie zuweisen einfach nur Werte sind oder Referenzen auf vorhandene Objekte . In C #, jedoch, wird diese Entscheidung nicht von dem Programmierer getroffen welcher ein Objekt instanziiert, sondern von demjenigen der das Objekt geschrieben hat.

Wenn Sie nicht wissen, ob das Objekt welches Sie verwenden ein Werttyp oder Referenztyp ist, können Sie einige Überraschungen erleben. Zum Beispiel:

  //struct
Point punktA = new Point(20, 30); Point punktB = punktA; point2.X = 50; Console.WriteLine(punktA.X); // ergibt:20
Console.WriteLine(punktB.X); // ergibt:50
//class Pen pen1 = new Pen(Color.Green); Pen pen2 = pen1; pen2.Color = Color.Black; Console.WriteLine(pen1.Color); // ergibt:Black
Console.WriteLine(pen2.Color); // ergibt:Black

Wie Sie sehen können, wurden sowohl die Point als auch die Pen-Objekte genau auf die gleiche Art und Weise erstellt, aber der Wert von Punkt 1 blieb unverändert, als punktB eine neue X-Koordinate zugeordnet wurde, während der Wert der pen1 wurde modifiziert wurde, als pen2 eine neue Farbe zugewiesen wurde. Wir können also folgern, dass punktA und punktB so verwendbar sind wie wir es von Datentypen wie z.B. Int gewohnt sind also jeweils ihre eigene Kopie des Objects beinhalten, während pen1 und pen2 Verweise auf das gleiche Objekt beinhalten. Wie erkennen wir so etwas nun im Voraus?

Die Antwort kann man bei der Definition der Objekttypen finden (im Visual Studio über den Namen des Objekttypes hovern und F12 drücken).

Das Schlüsselwort struct definiert einen Werttypen, während das Schlüsselwort class einen Referenztypen definiert. Für mehr Hilfe mit den Grundlagen des C# empfehle Ich einen passenden Kurs bei der ppedv.

Kommentare sind geschlossen