29.04.2014 Aufrufe

Leseprobe

Leseprobe

Leseprobe

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.

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-

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!