StructPerformance: Unterschied zwischen den Versionen
Aus Das Sopra Wiki
K Review entfernt, Split hinzugefügt |
|||
| Zeile 44: | Zeile 44: | ||
</source> | </source> | ||
Warum ändert die Methode ''ChangeNumber1'' nun bei der Ausgabe die Zahl nicht? Zur kurzen Wiederholung: Dieses Codebeispiel verwendet | Warum ändert die Methode ''ChangeNumber1'' nun bei der Ausgabe die Zahl nicht? Zur kurzen Wiederholung: Dieses Codebeispiel verwendet Objekte und Objekte sind [[CSharp#Datentypen|reference types]]. Beim Aufruf der Methode wird also nicht direkt das Objekt übergeben sondern nur eine Referenz, also ein Hinweis wo sich das dahinterliegende Objekt befindet. Da Parameter implizit mit call by value übergeben werden, also für die Methode kopiert werden, erhält die Methode quasi eine neue Referenz, welche lediglich auf das selbe Objekt verweist wie die ursprüngliche Referenz die beim Methodenaufruf verwendet wurde. Innerhalb der Methode wird die neue Referenz dann auf eine andere Instanz der Klasse ''Test'' geändert. Beim Verlassen der Methode wird die Referenz dann automatisch gelöscht, die neue Instanz der Klasse Test mit dem Wert 3 damit also auch da sie nichtmehr referenziert wird. | ||
Die Methode ChangeNumber2 greift dagegen über die kopierte Referenz auf die selbe Klasseninstanz zurück, auf die die ursprüngliche Referenz ebenfalls verweist. Daher wird hier der Zahlenwert geändert und anschließend auch entsprechend ausgegeben. | Die Methode ChangeNumber2 greift dagegen über die kopierte Referenz auf die selbe Klasseninstanz zurück, auf die die ursprüngliche Referenz ebenfalls verweist. Daher wird hier der Zahlenwert geändert und anschließend auch entsprechend ausgegeben. | ||
| Zeile 98: | Zeile 98: | ||
System.Console.WriteLine(struct1); //gibt {X:2 Y:2 Z:2} aus | System.Console.WriteLine(struct1); //gibt {X:2 Y:2 Z:2} aus | ||
System.Console.WriteLine(struct2); //gibt {X:4 Y:2 Z:2} aus | System.Console.WriteLine(struct2); //gibt {X:4 Y:2 Z:2} aus | ||
</source> | </source> [[Kategorie:Code-Beispiele]] | ||
== Call by Reference == | == Call by Reference == | ||
