Typen in C - AG Kastens - Universität Paderborn
Typen in C - AG Kastens - Universität Paderborn
Typen in C - AG Kastens - Universität Paderborn
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
3.2. Referenztypen<br />
E<strong>in</strong> Referenztyp def<strong>in</strong>iert zwei Entitäten: E<strong>in</strong> Objekt und e<strong>in</strong> Verweis (Referenz) auf dieses<br />
Objekt.<br />
Referenztypen lassen sich <strong>in</strong>sofern mit den Referenzen von Java und C++ vergleichen, als es sich<br />
um e<strong>in</strong>e Art typsicherer Zeiger handelt. E<strong>in</strong>e Referenz <strong>in</strong> C# - falls sie nicht null ist - zeigt unter<br />
Garantie immer auf e<strong>in</strong> Objekt des angegebenen Typs. Das Objekt wurde zudem <strong>in</strong> jedem Fall<br />
auf dem Heap (der Speicherhalde) abgelegt und nicht auf dem Laufzeitkeller. Man beachte auch<br />
die Tatsache, dass e<strong>in</strong>e Referenz null – e<strong>in</strong>e spezielle Referenz - se<strong>in</strong> kann, die jedem Typ<br />
angehört und nicht auf e<strong>in</strong> Objekt im Speicher zeigt.<br />
Im folgenden Beispiel wird e<strong>in</strong>e Variable e<strong>in</strong>es Referenztyps Person angelegt. Der Wert aber<br />
wird auf dem Heap untergebracht. In p steht also nur e<strong>in</strong>e Referenz auf diesen Wert.<br />
Person p = new Person(´´Müller´´, ´´Mart<strong>in</strong>´´);<br />
C# def<strong>in</strong>iert nicht nur Werttypen sondern wie im Kapitel 3 erwähnt auch e<strong>in</strong>e ganze Reihe von<br />
Referenztypen: Klassen, Arrays, Delegates und Schnittstellen. Immer dann, wenn man e<strong>in</strong> Objekt<br />
deklariert und erzeugt, die zu e<strong>in</strong>em dieser <strong>Typen</strong> gehört, wird auf dem Heap e<strong>in</strong> entsprechend<br />
großer Speicherblock angelegt, <strong>in</strong> dem die Nutzdaten untergebracht werden. Man arbeitet dann<br />
mit e<strong>in</strong>er Referenz auf das Objekt, also nicht wie bei den Werttypen direkt mit dem Speicherplatz<br />
und somit mit den dar<strong>in</strong> enthaltenen Datenelementen.<br />
Die Arrays <strong>in</strong> C# unterscheiden sich von denen <strong>in</strong> Java dadurch, dass der Programmierer die<br />
Möglichkeit hat mehrdimensionale Arrays zu deklarieren, während man <strong>in</strong> Java nur „jagged<br />
arrays“ Array von Array deklarieren kann. Die Tabelle 3.2.1 zeigt, wie man sowohl e<strong>in</strong>- und<br />
mehrdimensionale Arrays als auch „jagged arrays“ deklarieren kann.<br />
E<strong>in</strong> weiterer <strong>in</strong> Java ke<strong>in</strong> Gegenkonstrukt f<strong>in</strong>dender Referenztyp ist Delegate. E<strong>in</strong> Delegate ist<br />
e<strong>in</strong>e spezielle Klasse, deren Objekte Methoden enthalten. E<strong>in</strong> vergleichbares Konstrukt <strong>in</strong> C oder<br />
C++ ist der function po<strong>in</strong>ter. E<strong>in</strong> function po<strong>in</strong>ter <strong>in</strong> C oder C++ zeigt aber nur auf statische<br />
Methoden, während Delegate sowohl auf statische als auch auf Instanzmethoden zeigen kann.<br />
Des Weiteren speichert e<strong>in</strong> Delegate nicht nur den „E<strong>in</strong>trittspunkt“ e<strong>in</strong>er Methode sondern auch<br />
die Instanz des Objektes.<br />
Auch die Def<strong>in</strong>ition von Klassen und Interfaces <strong>in</strong> C# unterscheiden sich von denen <strong>in</strong> Java<br />
sowohl syntaktisch als auch semantisch ger<strong>in</strong>gfügig. Siehe dazu das Kapitel 4.1 Klassen und 4.2<br />
Interfaces.<br />
Seite 7 von 17