04.06.2013 Aufrufe

Typen in C - AG Kastens - Universität Paderborn

Typen in C - AG Kastens - Universität Paderborn

Typen in C - AG Kastens - Universität Paderborn

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!