Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
22<br />
Warum eine neue Programmiersprache?<br />
mehrere Basisklassen verwendet, sind die Scherereien im Allgemeinen größer als<br />
der Nutzen. Nicht zuletzt aus diesem Grund ist C# auf eine einzige Basisklasse<br />
beschränkt. Und wenn Sie glauben, auf Mehrfachvererbung nicht verzichten zu<br />
können, bleibt Ihnen immer noch die Möglichkeit, Ihr Polymorphiekonzept über<br />
Schnittstellen zu implementieren.<br />
Nachdem es in C# keine Zeiger gibt, drängt sich die Frage auf, wie C# mit Funktionszeigern<br />
verfährt. Die Anwort lautet: vermittels Delegationen, die gleichzeitig<br />
den Unterbau für das gesamte Ereignismodell der NGWS-Laufzeitumgebung bilden.<br />
Mehr darüber gleichfalls in Kapitel 5, »Klassen«.<br />
1.1.4 Typensicher<br />
Noch einmal zurück zu den Zeigern: Wenn Sie in C++ einen Zeiger haben, steht<br />
es Ihnen frei, für diesen eine Typumwandlung in jeden anderen Datentyp zu<br />
erzwingen. Das heißt, es steht Ihnen vom Prinzip her auch frei, wirklich idiotische<br />
Dinge zu tun, wie einen Wert vom Typ int* (int-Zeiger) in einen Wert vom Typ<br />
double* (double-Zeiger) zu verwandeln. Solange hinter einer solchen Operation<br />
noch ein realer Speicherwert steckt, mag das zwar funktionieren, sinnvoll ist es<br />
aber sicher nicht. Von einer eigens für Unternehmenslösungen entwickelten Sprache<br />
sollte man schon etwas mehr Sicherheit erwarten können.<br />
Nicht zuletzt aus diesem Grund, aber auch um den Garbage Collector zu schützen,<br />
steht die Typensicherheit im Anforderungskatalog von C# ganz weit oben.<br />
Das bedeutet natürlich für Sie, dass Sie sich bei C# an ein paar Regeln halten<br />
müssen, die den Umgang mit Variablen betreffen:<br />
• Variablen müssen grundsätzlich initialisiert werden. Die Elementvariablen von<br />
Objekten setzt zwar der Compiler implizit auf 0, um lokale Variablen von Methoden<br />
müssen Sie sich aber in jedem Fall selbst kümmern. Da der C#-Compiler<br />
nichtinitialisierte Variablen bemängelt, werden schwer aufzufindende<br />
Fehler, wie sie in C/C++ häufig auftreten, bereits im Keim erstickt.<br />
• C# räumt mit unsicheren Typumwandlungen ein für alle Mal auf. Der C#-<br />
Compiler schließt die Typumwandlung von einem wertbehafteten Typ in einen<br />
Referenztyp aus (das Boxing ausgenommen) und überprüft bei der Typumwandlung<br />
von Objektreferenzen rigide, ob das jeweilige Objekt wirklich von<br />
der Klasse abstammt, die für die als Linkswert fungierende Objektvariable vereinbart<br />
wurde.<br />
• C# stellt die Einhaltung von Array-Grenzen sicher. Im Gegensatz zu C/C++ ist<br />
es nicht mehr möglich, »Elemente« jenseits der Arraygrenzen anzusprechen<br />
und in Speicherbereiche zu schreiben oder daraus zu lesen, für die keine Belegung<br />
erfolgt ist.<br />
• Arithmetische Operationen können Überläufe produzieren. C# bietet eine<br />
Überlaufkontrolle auf Anwendungsebene oder auf der Ebene einzelner Anwei-