Jorg Witte Programmieren in C#
Jorg Witte Programmieren in C# Von den ersten Gehversuchen bis zu den Sieben-Meilen-Stiefeln Teubner B. G. Teubner Stuttgart Leipzig Wiesbaden
Bibliografische Information der Deutschen Bibliothek Die Deutsche Bibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliographie; detaillierte bibliografische Daten sind im Internet Ober <http://dnb.ddb.de> abrufbar. Dr. rer. nat. habil. Jorg Witte Geboren 1957 in Frankfurt am Main. Studium der Mathematik und Physik an der FU-Berlin. 1988 Diplom in Mathematik. 1991 Promotion und 1997 Habilitation. 1988-1993 wissenschaftlicher Mitarbeiter der FU-Berlin. 1988-1992 Vorlesungen vor Informatikstudenten an der Technischen Fachhochschule Berlin. ab 1993 Vorlesungen an der FU-Berlin. 1998 Forschungs- und Lehraufenthalt an der Middle East Technical University. Ankara. ab 2000 Dozent for Programmiersprachen in der beruflichen Fortbildung. 1. Auflage Juli 2004 Aile Rechte vorbehalten B. G. Teubner Verlag / GWV Fachverlage GmbH. Wiesbaden 2004 Der B. G. Teubner Verlag ist ein Unternehmen von Springer Science+Business Media. www.teubner.de Das Werk einschlieblich aller seinerteile ist urheberrechtlich geschotzt. Jede Verwertung auberhalb der engen Grenzen des Urheberrechtsgesetzes ist ohne Zustimmung des Verlags unzulassig und strafbar. Das gilt insbesondere for Vervielfaltigungen. Obersetzungen. Mikroverfilmungen und die Einspeicherung und Verarbeitung in elektronischen Systemen. Die Wiedergabe von Gebrauchsnamen. Handelsnamen. Warenbezeichnungen usw. in diesem Werk berechtigt auch ohne besondere Kennzeichnung nicht zu der Annahme. dass solche Namen im Sinne der Warenzeichen- und Markenschutz-Gesetzgebung als frei zu betrachten waren und daher von jedermann benutzt werden dorften. Umschlaggestaltung: Ulrike Weigel. www.corporatedesigngroup.de Gedruckt auf saurefreiem und chlorfrei gebleichtem Papier. ISBN-13:978-3-519-00471-4 e-isbn-13:978-3-322-80073-2 DOl: 10.1007/978-3-322-80073-2
Vorwort Dieses Buch ist aus einer Vorlesung entstanden, die ich im Sommersemester 2003 an der FU Berlin gehalten habe. Es flossen auch Erfahrungen ein, die ich als Dozent in der beruflichen Weiterbildung sammeln konnte. Die Studenten und Lehrgangsteilnebmer besaben keine Vorkenntnisse in der Programmiersprache C# und nur zum Teil Kenntnisse in einer anderen Programmiersprache. Auch an den Leser werden keine Voraussetzungen gestellt. Lediglich die Fiihigkeit zum logischen und abstrakten Denken solite er mitbringen. Mit einer Portion gesunden Menschenverstand sowie Interesse kann der Leser sehr tief in die Materie eindringen. Dieses Buch unterscheidet sich daher von vielen anderen Biichern iiber Programmiersprachen. Nicht selten wird der unbedarfte Leser mit einem iiber tausendseitigen Werk erschlagen, das eher filr Experten gescbrieben ist. Aber wie wird man ein Fachmann filr eine Programmiersprache? Programmieren ist auch eine Fertigkeit, die nicht nur theoretisch gelernt werden kann. Ein Musikinstrument zu spielen, lernt man auch nicht ausschlieblich in der Notenschule, sondern durch regelm1ibiges Dben. Dem Schiller muss aber auch gezeigt werden, wie er das machen soli. Eine Fiihigkeit muss vorgefiibrt werden, so dass sie nachgeahmt werden kann. Daher wird hier der Sachverhalt an vielen Beispielen verdeutlicht. Durch erganzende Dbungen erhiilt der Leser die Moglichkeit, das Erlernte auszuprobieren. Es w!ire aber zu kurz gegriffen, das Erlernen einer Programmiersprache ausschlieblich als den Erwerb eines handwerklichen Geschicks anzusehen. SchlieBlich ist eine Programmiersprache eine Sprache, mit der Informationen ausgedriickt werden konnen. Es konnen sehr komplexe Datenstrukturen und Operationen auf ihnen dargestelit werden. Ein fundiertes theoretisches Riistzeug ist unerliisslich. 1m Gegensatz zu einigen Biichern filr Einsteiger werden hier keine Kochrezepte vorgestelit, die es nur mechanisch, ohne Sinn und Verstand anzuwenden gilt. Eine Sprache - insbesondere eine Programmiersprache - besteht neben ihren Wortern aus einer Vielzahl von Regeln, wie die Worter zu verwenden sind. Eine Programmiersprache besitzt sowohl vorgegebene Worter als auch die Moglichkeit, Bezeichner selbst zu definieren. Es ist sogar moglich, eigene Verwendungsregeln zu definieren. All dieses sollte aber durchdacht geschehen. Daher wird auch ein grundlegendes Verstlindnis vermittelt. Zusammenhiinge und Anwendungsmoglichkeiten der sprachlichen Ausdrucksmittel werden dargestellt. Der Leser solite durch die LektUre in die Lage versetzt werden, die sprachlichen Mittel und Programmiertechniken selbst zu beurteilen und einzuordnen. Auch Beziige zu den auber-
6 Vorwort sprachlichen Anforderungen an ein Programm herzustellen, gemrt zu den Kompetenzen, die der Leser sich aneignen kann. Berlin, Marz 2004 Jl>rg Witte
7 Inhaltsverzeichnis Vorwort... 5 Inhaltsverzeichnis... 7 1 EinfUhrung in die objektorientierte Programmierung... 11 2 Warum eine neue Programmiersprache?... 15 3 Ein erstes Beispielprogramm... 17 4 Darstellung von Daten... 23 4.1 Grundlagen... 23 4.2 Hexadezimalsystem... 23 4.3 Wert- und Verweistypen... 24 5 Das NET-Framework... 26 5.1 Intermediate Language... 26 5.2 Die Standardklassenbibliothek... 27 6 Vordefinierte Datentypen... 28 6.1 Grundlagen... 28 6.1.1 Der logischetyp... 31 6.1.2 Der Zeichentyp... 31 6.1.3 Die Ganzzahltypen... 31 6.1.4 Die Gleitkommazahlen... 32 6.1.5 Dezimale... 32 6.1.6 Strings... 32 6.1.7 Die Klasse obj ect... 33 6.1.8 Konstanten... 34 6.1.9 Darstellung von Werten durch Bytezustande... 34 6.2 Typenkonvertierung... 35 7 Arrays... 39 8 Operationen und Ausdriicke... 47 8.1 Arithmetische Operatoren...48 8.2 Vergleichsoperatoren... 49 8.3 Logische Operatoren... 50 8.4 Bitweise Operatoren... 52 8.5 Zuweisungsoperatoren... 54 8.6 Sonstige Operatoren... 55 8.6.1 Der Type-Cast-Operator..... 55
8 Inhaltsverzeichnis 8.6.2 Der Fragezeichenoperator... 55 8.6.3 Vorrangregeln und Assoziativitat... 56 8.6.4 Ausdrucksanweisungen... 57 9 Statische Methoden und Variablen... 59 10 Programmsteuerung... 67 10.1 Verzweigungen... 67 10.2 Schleif en... 77 10.2.1 Grundlagen... 77 10.2.2 Die for-schleife... 77 10.2.3 Die while-schleife... 80 10.2.4 Die do-schleife... 82 10.3 Die Befehle break und continue... 83 11 Klassen und Objekte... 87 11.1 Definition und Verwendungsweise... 87 11.2 Instanzmethoden... 90 11.3 ParameterUbergabe als Wert oder Verweis... 93 11.4 Params-Parameter... 96 11.5 Lebensdauer und Sichtbarkeit von Variablen... 97 11.6 Uberladen von Methoden... 99 11.7 Uberladen von Operatoren... 101 11.8 Konstruktoren... 103 11.9 ZerstOren von Objekten... 109 12 Vererbung... 113 12.1 Einfiihrung... 113 12.2 Ableiten einer Klasse... 113 12.3 ~onvertierungen zwischen Basis- und abgeleiteten Klassen... 119 12.4 Uberlagem von Methoden... 123 12.4.1 Polymorphie... 123 12.4.2 Virtuelle Methoden... 124 12.4.3 Abstrakte Methoden... 127 12.4.4 Versteckte Methoden... 129 12.4.5 Versiegelte Methoden und Klassen... 132 13 Eigenschaften und Indexer.... 134 13.1 Eigenschaften... 134 13.2 Indexer... 137 14 Interfaces... 139 14.1 Grundlagen... 139 14.2 Definition... 142 14.3 Verwendung... 143
14.4 Polymorphie... 151 14.5 Explizite Implementation... 157 14.6 Ableiten von Interfaces... 158 15 Geschachtelte Klassen... 160 15.1 Grundlagen... 160 15.2 Innere Klassen... 164 15.3 Innere Klassen mit einem Interface... 167 16 Exceptions... 170 16.1 Grundlagen... 170 16.2 Ausnahmehandlung... 170 16.3 Die Klasse System. Exception... 180 16.4 Das Werfen von Ausnahmen... 181 16.5 Die SchlUsselworter checked und unchecked... 183 17 Strukturen, Enumerationen und Boxing... 185 17.1 Strukturen... 185 17.2 Enumerationen... 188 17.3 Boxing... 191 18 Streams und Dateioperationen... 193 18.1 Einfiihrung... 193 18.2 Die Klasse Stream... 194 18.3 Die Klasse FileStream... 197 18.4 Die Klassen TextWriterund Streamwriter... 201 18.5 Die Klassen TextReader und StreamReader... 207 18.6 Die Klasse FileInfo und DirectoryInfo... 210 18.7 Die Klassen BinaryReader und BinaryWriter... 217 18.8 Die Klassen BufferedStream und MemoryStream... 220 19 Attribute... 226 19.1 Metadaten... 226 19.2 Verwendung von Attributen... 228 20 Delegaten und Ereignisse... 233 20.1 Einfiihrung und Motivation... 233 20.2 Definition und Verwendungsweise eines Delegaten... 238 20.3 Ereignisse... 250 21 GrundzUge der Windowsprogrammierung... 259 21.1 Einfiihrung in graphische Benutzeroberflachen und Windowsanwendungen... 259 21.2 Ereignissteuerung... 263 21.3 Graphische Steuerelemente... 266 21.4 Modale Dialogfenster... 271 9
10 Inhaltsverzeichnis 22 23 21.5 21.6 21.7 21.8 Mentis... 282 Maus- und Tastaturereignisse... 286 Die Ereignisse Load und Paint und die Klasse Graphics.. 299 Benutzerdefinierte Steuerelemente... 317 Vergleich mit den Sprachen c++ und Java... 325 Stichwortverzeichnis... 328