Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
Kapitel 1 • Einführung in C# 21<br />
gleichermaßen vom NGWS-Laufzeitsystem gestellt. Die spitzfindigen HRESULT-<br />
Werte von C++ haben ausgedient, die Fehlerbehandlung auf der Basis von Ausnahmen<br />
wird in C# zu einem robusten Mittel für den Programmieralltag.<br />
Im Zeitalter der globalen Vernetzung ist Sicherheit zu einer zentralen Anforderung<br />
für Programmiersprachen geworden – insbesondere für solche, die für sich<br />
das Attribut »modern« in Anspruch nehmen wollen. C# lässt Sie hier nicht im<br />
Regen stehen: Die Sprache bietet von der Syntax her in Form der sogenannten<br />
Metadaten Unterstützung für das zentrale Sicherheitsmodell der NGWS-Laufzeitumgebung.<br />
Eine detailliertere Diskussion dieses Konzepts finden Sie gleich im<br />
nächsten Kapitel.<br />
1.1.3 Objektorientiert<br />
Ein Verzicht auf Objektorientierung dürfte so ziemlich das Letzte sein, was man<br />
heute von einer neuen Programmiersprache erwartet, oder? Selbstverständlich<br />
unterstützt C# sämtliche Schlüsselkonzepte der objektorientierten Programmierung,<br />
darunter Features wie Verkapselung, Vererbung und Polymorphie. Das<br />
gesamte in C# vorgegebene Klassenmodell gründet auf das von der NGWS-Laufzeitumgebung<br />
bereitgestellte virtuelle Objektsystem (VOS), das im nächsten<br />
Kapitel genauer beschrieben wird. Mit anderen Worten, das Objektmodell ist nun<br />
Bestandteil der Infrastruktur und nicht mehr nur der Programmiersprache.<br />
Wie Sie gleich zu Anfang bemerken werden, wenn Sie sich mit der Sprache als<br />
solcher auseinandersetzen, gibt es keine globalen Funktionen, Variablen und Konstanten<br />
mehr. Alles muss in einer Klasse enthalten sein – entweder als statisches<br />
Element (zu einem Typ gehörig) oder als dynamisches Element (zur Instanz eines<br />
Typs gehörig). Das verbessert nicht nur die Lesbarkeit Ihres Codes, sondern beugt<br />
auch potenziellen Namenskonflikten vor.<br />
Die Methoden einer Klasse sind standardmäßig nicht virtuell, das heißt, sie lassen<br />
sich in einer abgeleiteten Klasse nicht überschreiben. Der Hintergedanke dabei<br />
ist, das unbeabsichtigte Überschreiben von Methoden zu verhindern. Damit eine<br />
Methode überschrieben werden kann, muss sie explizit mit dem Modifizierer virtual<br />
deklariert sein. Das hält nicht nur den Umfang der virtuellen Methodentabelle<br />
(vtable) klein, sondern garantiert auch, dass sich Ihr Code versionsgerecht<br />
verhalten kann.<br />
Wer von C++ kommt, ist es gewohnt, die Sichtbarkeit von Elementen über<br />
Zugriffsmodifizierer zu gestalten. Diese Modifizierer, private, protected und<br />
public, finden Sie natürlich auch in C#. Darüber hinaus kennt C# aber noch einen<br />
vierten Modifizierer: internal. Details dazu diskutiert Kapitel 5, »Klassen«.<br />
Haben Sie in C++ jemals bewusst eine Klasse von mehreren Basisklassen abgeleitet?<br />
(ATL-Programmierer bitte weghören, Ihre Stimme zählt hier nicht!) In fast<br />
allen Fällen kommt man mit einer einzige Basisklasse aus. Und wenn man doch