Entwickler-Ecke

Basistechnologien - Allgmeine Frage zum Speichern von Variablen/Objekten


Sneedlewoods - Fr 05.04.13 18:39
Titel: Allgmeine Frage zum Speichern von Variablen/Objekten
Hallo Ihr,

ich programmiere jetzt schon länger, und habe darüber, wie Objekte gespeichert oder verändert werden eigentlich nur Beiläufiges mitbekommen. Mittlerweile frage ich mich dies aber immerhäufiger und wundere mich manchmal, dass meine Programme einigermaßen laufen ;)

z.B.


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
public class MyObject //ich erstelle eine Beliebige Klasse
{
}

public class MyClass //in einer anderen Klasse verwende ich MyObject innerhalb eines Arrays
{
  MyObject[] array1 = new MyObject[10];
  MyObject obj = array1[5];

  //Wenn ich jetzt obj verändere, verändere ich dann auch array1[5] ?
  //Wenn ich array1[5] verändere, verändere ich dann auch obj?
}


Traditionell würde ich einfach obj verändern und dieses dann sofern gewünscht zurückspeichern

C#-Quelltext
1:
array1[5] = obj;                    

Aber handelt es sich dabei wirklich um Zuweisungen oder zeigt obj einfach auf das array1[5]?

Vielen Dank für Euer Wissen!


Troubadix - Fr 05.04.13 19:04

Hallo Sneedlewoods,

wenn Du schon länger programmierst wundert es mich etwas, dass Du diese Frage nicht selbst beantworten kannst.

Schau dir hier mal den Unterschied zwischen Referenztypen und Wertetypen an: Galileo Open Book [http://openbook.galileocomputing.de/visual_csharp_2010/visual_csharp_2010_02_003.htm#mj2f5f2bae63590a7d163f13a30afb3b43] (kleines bischen runter scrollen)

Was Du da erstellst ist ein Referenztyp. Dementsprechend erzeugst du mit der zweiten Anweisung lediglich einen weiteren Verweis auf arra1[5]. Beide variablen zeigen also auf das selbe Objekt. Wenn du also den Inhalt von obj ändert ändert sich auch der Inhalt von array1[5] da es sich nur um zwei unterschiedliche Verweise auf das selbe Objekt handelt.

Gruß
Troubadix


Sneedlewoods - Sa 06.04.13 02:37

Vielen Dank Troubadix, mit dem letzten Teil kann ich tatsächlich was anfangen! Leider gibt es die lästige Angewohnheit dem Fragenden stehts eine reinzudrücken. Lass mich Deine Verwunderung also damit bestätigen, dass ich schlichtweg zu blöd war, die Frage selbst beantworten zu können. Gottseidank gibt es schlaue Leute, die den Dummen helfen können.
Damit sollte doch jetzt jeder zufriedengestellt sein ;)