Visual C# 2011 Grundkurs

Wertetypen und Referenztypen

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Was es mit diesen beiden Typen des .NET-Frameworks auf sich hat, verrät der Trainer in diesem Video.
04:58

Transkript

Wir schauen uns jetzt mal zwei verschiedene Arten von Typen im .NET-Framework an. Das sind zum einen die Werte- und die Referenztypen. Zwischen diesen beiden Typen gibt es relativ große Unterschiede und diese Unterschiede muss man z.B. beim Methodenaufruf beachten, weil sich da teilweise unterschiedliche Verhalten ergeben, wenn ich diese Typen als Parameter an die Methode übergebe. .NET kennt, wie gesagt, zwei Arten von Typen. Zunächst kennt es die Wertetypen. Wertetypen sind zunächst mal die primitiven Datentypen, also int, long, dann gibt es noch sowas wie short und byte. Das sind eben halt Ganzzahldatentypen mit unterschiedlichen Datenbereichen. Und dann gibt es noch die Enums, die werden intern, je nachdem welchen Typ man dort angibt - man kann da auch explizit einen Typ angeben - aber standardmäßig werden die intern mit ints verwaltet. Und dann gibt es noch die Structs. Structs sind so ähnlich wie Klassen, allerdings sind das eben halt Wertetypen. Als nächsten Typ gibt es noch die Referenztypen. Referenztypen sind z.B. Klassen, Inferfaces, Delegates, und Arrays. Wir schauen uns zunächst mal die Referenztypen an. Wenn ich hier oben so einen Referenztyp erzeugen möchte, brauche ich zunächst eine Referenz. Die Referenz erzeuge ich mir, indem ich sage "Typ", also in diesem Fall "Klasse Person", und dann "Name der Referenz". So erstelle ich eine Referenz. Im nächsten Schritt gehe ich hin und erzeuge ein neues Objekt und weise dieses Objekt der Referenz zu. Ab diesem Moment zeigt diese Referenz irgendwo im Speicher auf ein Objekt. Wenn ich jetzt den Namen der Referenz, also "Ich." z.B., in dem Feld "Name" nehme, dann kann ich damit auf den Inhalt dieses Objektes zugreifen. Das sind die Referenztypen. Wenn ich jetzt diese Referenztypen mit einer Methode übergebe, dann ergibt sich ein spezielles Verhalten. Schauen wir uns das mal an. Zunächst erzeuge ich mir hier oben eine neue Referenz und weise dieser Referenz gleichzeitig ein neues Objekt zu. Danach übergebe ich dieses Objekt der Methode erschöpfe(). Und diese Methode erschöpfe() soll jetzt einfach nur intern etwas von der Energie abziehen. Und in dem Moment, wo ich diese Methode erschöpfe() aufrufe, wird die Referenz, "Ich" kopiert in die Referenz "object". Das heißt aber, weil die Referenz "object" vorher auf ein Objekt gezeigt hat und ich diese Referenz jetzt einfach kopiere, dass die Referenz "object", also "obj", auf dasselbe Objekt zeigt. Wenn ich nun also hier von der Energie 20 abziehe, dann ziehe ich das unter anderem auch von dem Objekt ab, dessen Referenz "Ich" oben in der main-Methode ursprünglich mal mein Parameter war. Also sowohl die Referenz "Ich" in der main-Methode, als auch unser Methodenparameter "obj" zeigen auf dasselbe Objekt. Und deshalb, wenn ich in der Methode eine Änderung an diesem Objekt durchführe, habe ich diese Änderung später auch bei der Referenz "Ich" in meiner main-Methode. Bei Wertetypen sieht das Ganze ein bisschen anders aus. Wenn ich einen Wertetyp anlege, dann wird zunächst so eine Variable angelegt und wenn ich jetzt dort eine Zuweisung mache, dann wird kein Objekt erzeugt oder sonst irgendwas, sondern dieser Wert einfach in diese Variable reingeschrieben. Wenn man das Ganze dann beim Methodenaufruf sich mal anguckt, habe ich hier oben den Bereich, wo ich mir zunächst eine Variable anlege und dann einen Wert definiere. Und dann hier unten rufe ich das Ganze auf. Eben wurde der Inhalt von der Referenz kopiert und hier wird jetzt auch dieser Inhalt kopiert, aber hier ist es eben halt der Wert. Das heißt, wenn ich jetzt hier in "addiere" weiterarbeite, und hier unten 2 hinzuaddiere, dann ändere ich nicht den Wert der Variable "Zahl" in main, sondern nur den Wert des lokalen Parameters "Summand" in der Methode addiere(). Und das ist der große Unterschied zwischen Wertetypen und Referenztypen. Wenn ich Wertetypen übergebe und mache Änderungen in der Methode an diesem Wertetyp, dann habe ich nach Abarbeitung der Methode diese Änderung nicht an meiner Aufrufstelle. Wenn ich hingegen einen Referenztyp übergebe und ändere den in einer Methode, dann habe ich diese Änderung auch, nachdem die Methode ausgeführt wurde, wieder an meiner Aufrufstelle. Ich fasse noch mal zusammen. Wir haben gesehen, dass es zwei verschiedene Arten von Typen im .NET-Framework gibt. Zum einen sind das die Wertetypen, das sind die meisten primitiven Datentypen, zusätzlich Enums und Structs, und die Wertetypen, das sind z.B. Klassen, Delegates, Arrays und Interfaces. Wenn ich einen Wertetyp an eine Methode übergebe, dann wird dieser Wert - man nennt es - "by value" aufgerufen. Das heißt, dass der Inhalt meiner Variablen, hier war es z.B. "Zahl", kopiert wird. Das heißt, wenn ich in der Methode dann diesen Wert verändere, verändere ich nicht den Wert an der Aufrufstelle. Referenztypen sind einfach nur Referenzen, die auf irgendein Objekt zeigen, das in meinem Speicher angelegt wurde. Wenn ich jetzt diese Referenz an eine Methode übergebe, dann wird dieser Inhalt dieser Referenz - also der Zeiger, mehr oder weniger - wird kopiert, und damit zeigt auch die Referenz in meiner Methode auf dieses Objekt. Daraus folgt eben, dass wenn ich in meiner Methode an dieser Referenz - und damit an dem Objekt - irgendetwas ändere, ändere ich das auch an meiner Aufrufstelle und wenn ich später die Methode abgearbeitet habe, habe ich - hier in diesem Beispiel meiner main-Methode - an diesem Objekt diese Änderung auch durchgeführt.

Visual C# 2011 Grundkurs

Steigen Sie in die C#-Programmierung ein und lernen Sie sowohl die Grundlagen der Sprache C# als auch die Entwicklungsumgebung Visual Studio 2010 und .NET-Framework kennen.

7 Std. 28 min (81 Videos)
Derzeit sind keine Feedbacks vorhanden...
Hersteller:
Software:
Visual Studio Visual Studio 2010
Exklusiv für Abo-Kunden
Erscheinungsdatum:27.06.2011

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!