Uwe Klappert. Coding For Fun mit C#

Ähnliche Dokumente
Konzepte von Betriebssystem-Komponenten

Die ersten C#- Programme erstellen

Praxiswissen Online-Marketing

Microsoft.NET. InfoPoint 8. Juni 2005 Stefan Bühler

Gradle. Ein kompakter Einstieg in modernes Build-Management. Joachim Baumann. Joachim Baumann, Gradle, dpunkt.verlag, ISBN

Universität Karlsruhe (TH) Moderne Programmiersysteme am Beispiel von.net

.NET Framework. 3. Das.NET Framework

Vergleich von Webtechnologien zur Erstellung einer Rich Internet Applicationam Beispiel der Kundenverwaltungssoftware VDMS

Picking the winners - Dienstleistungsorientierte Bestandspflegeund Ansiedlungspolitik

Yoga - die Kunst, Körper, Geist und Seele zu formen

Das Internet als Instrument der Unternehmenskommunikation unter besonderer Berücksichtigung der Investor Relations

360.NET. Jan Schenk Developer Evangelist Web/Live Microsoft Deutschland

IDE-Visual Studio 2010 C#

Programmieren II. Dr. Klaus Höppner. Hochschule Darmstadt WS 2006/2007

Programmieren I. Die Programmiersprache Java. Institut für Angewandte Informatik

Vorlesung AFCW, Microsoft.NET Wintersemester 2002/03. Völlig neue Systemstruktur als Antwort auf Java

Android DER SCHNELLE UND EINFACHE EINSTIEG IN DIE PROGRAMMIERUNG UND ENTWICKLUNGSUMGEBUNG. EXTRA: E-Book inside. dirk LOUIS peter MÜLLER. 2.

Konzeption eines Sportmagazins für Randsportarten

8a. Exkurs.NET. 8a.1.NET Architektur

Übergewichtige Kinder und Jugendliche in Deutschland

Software entwickeln mit Verstand

NET.Compact Framework

C++ mit. Microsoft Visual C Richard Kaiser. Einführung in Standard-C++-, C++/CLI und die objektorientierte Windows.

Mobbing am Arbeitsplatz

ios-apps programmieren mit Swift

Bettina Heberer. Grüne Gentechnik. Hintergründe, Chancen und Risiken

Windows 8 Apps entwickeln

Die Programmiersprache Java. Dr. Wolfgang Süß Thorsten Schlachter

Dipl.-Inform. Arno Becker Dipl.-Inform. Marcus Pant

Klientenzentrierte Gesprächsführung in der Physiotherapie:

Objektorientiertes Programmieren mit Visual Basic DOT Net (VB.NET)

CLR CIL MCS ECMA-335. Linux.Ne t Albrecht Liebscher, Erlanger Linux Tage

Die Big Five und ihre Auswirkungen auf das Gründungsverhalten

Bewegliche Ziele Entwicklungsumgebungen für Pocket PCs und Smartphones

Office und das.net Framework

Vergleich CLR von.net mit JVM:

Für die Erstellung von Javaprogrammen sind eventuell zwei Komponenten nötig. 1. Das Java-Develepment-Kit (JDK) und die 2. Java Runtime Engine (JRE)

Anforderungen von Crossmedia-Kampagnen

Innovative Preismodelle für hybride Produkte

Workshop-Buch Windows 7

Einführung in die Programmierung mit Java

Grundlagen der Programmentwicklung

Ralf-Stefan Lossack Wissenschaftstheoretische Grundlagen für die rechnerunterstützte Konstruktion

4. Objektorientierte Programmierung mit C++

HTML Spielend gelingt die Website

Ideengeschichte der Physik

O Reillys Taschenbibliothek. DNS & BIND im IPv6. kurz & gut. Cricket Liu O REILLY. Deutsche Übersetzung von Kathrin Lichtenberg

Java Entwicklung für Embedded Devices Best & Worst Practices!

Irmtraut Meister / Lukas Salzburger AVR- Mikrocontroller-Kochbuch Entwurf und Programmierung praktischer Anwendungen

Grid-Systeme. Betrachtung verschiedener Softwareplattformen zur Realisierung von Grids und Vorstellung des Globus Toolkit Grid Systeme 1

Wirtschaft. Tom Keller

Reihe Nachhaltigkeit. Energiepolitik: Rahmenbedingungen für die Entwicklung von fossilen Brennstoffen zu erneuerbaren Energien.

Hilfsangebote für Kinder und Jugendliche ohne eigenen Wohnsitz

Zentrale Benutzerverwaltung für heterogene Netzwerkumgebungen mit LDAP und Samba

Immobilien als Mittel der privaten Altersvorsorge

Einführung in die Programmierung 1

Bibliografische Information der Deutschen Nationalbibliothek:

Peter tom Suden. Die elektronische Rechnung in Handels- und Steuerrecht

Einführung in Microsoft.NET

Die Bedeutung der Geburtenregistrierung. für die Verwirklichung der UN-Kinderrechte

Das Anatomie-Booklet

Microsoft Visual C#.NET Programmier-Rezepte

Java Einführung Programmcode

Grundkurs Programmieren in Visual C#

.NET und wieder eine Middleware Architektur?

Anja Schüler. Arbeit für alle?! Berufliche Teilhabe von Menschen mit geistiger Behinderung in Deutschland und den USA.

Die Entwicklung der Rechtsprechung hinsichtlich der Rechtsstellung der Gesellschaft bürgerlichen Rechts und ihrer Gesellschafter im Rechtsverkehr

Vorwort. Walter Doberenz, Thomas Gewinnus. Visual Basic Kochbuch. ISBN (Buch): ISBN (E-Book):

Windows Presentation Foundation (WPF) -Grundlagen -Steuerelemente. Dr. Beatrice Amrhein

Das Fuji X100 Handbuch

Jochen Bartlau. List & Label. schnell + kompakt

C# Tutorial Part 1. Inhalt Part 1. Einleitung. Vorbereitung. Eagle Eye Studios. Einleitung Vorbereitung Das erste Projekt

Visual C# Grundlagen Programmierung. Ralph Steyer. 1. Ausgabe, Oktober 2015 VCSPNET2015 ISBN

Whitepaper. Produkt: List & Label. Thema: Eine Übersicht der Einbindungsmöglichkeiten. combit GmbH Untere Laube Konstanz

Führungsstile im Vergleich. Kritische Betrachtung der Auswirkungen auf die Mitarbeitermotivation

Volkskrankheit Depression

SAP Business One Adapter

Mit freundlichen Empfehlungen KARL STORZ

C# - Einführung in die Programmiersprache. Leibniz Universität IT Services Anja Aue

Whittaker, Holtermann, Hänni / Einführung in die griechische Sprache

Microsoft.NET und SunONE

Versuch 8 Gerätesteuerung mit SICL und VISA in C Widerstandskennlinie

Entwicklung eines Marknagels für den Humerus

Berufseinstieg für Ingenieure

Spring Dynamic Modules for OSGi Service Platforms

dpunkt.lehrbuch Bücher und Teachware für die moderne Informatikausbildung

Microsoft.NET Framework

Anleitung zum Archive Reader. ab Version

Robuste Handkonturerkennung

Für diese Anleitung benötigen Sie: Generelles zu OpenCV (Intel's Open Computer Vision C/C++ Bibliothek) Einrichten der Entwicklungsumgebung

Die deutsch-französischen Beziehungen von der Wiedervereinigung zum Maastrichter Vertrag

IT-Controlling für die Praxis

Überblick. Exkurs: Organisation des Quellcodes (1)

Übung Softwareentwicklung 1, WS0910 Gemeinsame Einführung

Moderne Entwicklungsumgebungen am Beispiel von.net

Jörg Pacher. Game. Play. Story? Computerspiele zwischen Simulationsraum und Transmedialität

Modellierung und Programmierung 1

Janina Spieß. Die Beziehung zu Kindern in der Krippe gestalten. Gebärden und Gesten als pädagogische Hilfsmittel. Diplomica Verlag

Programmieren I. Die Programmiersprache Java. Institut für Angewandte Informatik

Seite Seite 2

Transkript:

Uwe Klappert Coding For Fun mit C#

Liebe Leserin, lieber Leser, ich freue mich, dass Sie sich für dieses Coding for Fun-Buch entschieden haben. Sie sind Programmierer aus Berufung und Ihnen macht es Spaß, Aufgaben programmierend zu lösen? Dann sind Sie hier genau richtig! Dieses Buch bietet Ihnen sechs ungewöhnliche Programmierprojekte an, die Sie (Programmiererfahrung vorausgesetzt) ganz einfach nachvollziehen können. Die Projekte haben nur das eine Ziel: Sie zu unterhalten und zum Knobeln und Ausprobieren anzuregen. Wir versprechen Ihnen keine schlanken Lösungen, keine Snippets, die sie beruflich verwenden könnten, sondern reinen Programmierspaß. Dabei sind die Projekte so unterschiedlich und abwechslungsreich wie Aprilwetter: Eine Poker-Runde gefällig? Abendstimmung mit Sternenhimmel oder lieber Wecker-Tool? Oder wollten Sie schon immer den DAX manipulieren? Legen Sie einfach los. Die aktuelle und für die Beispiele benötigte Visual Studio Express Edition 2010 und der Beispielcode liegen auf der Buch-DVD für Sie bereit. Noch eine Anmerkung in eigener Sache: Dieses Buch wurde mit großer Sorgfalt geschrieben, begutachtet, lektoriert und produziert. Doch kein Buch ist perfekt. Sollte also etwas nicht so funktionieren, wie Sie es erwarten, dann scheuen Sie sich nicht, sich mit mir in Kontakt zu setzen. Ihre freundlichen Fragen und Anmerkungen sind jederzeit willkommen. Viel Freude beim Lesen und Programmieren wünscht Judith Stevens-Lemoine Lektorat Galileo Computing judith.stevens@galileo-press.de www.galileocomputing.de Galileo Press Rheinwerkallee 4 53227 Bonn

Auf einen Blick 1 Einleitung... 9 2 Die Sache mit.net... 13 3 Ausgeschlafen das Wecker-Tool... 41 4 Alles Täuschung oder was? Herr Hermann und sein Gitter... 69 5 Mit Argusaugen der nächtliche Sternenhimmel... 101 6 Garantiert ungefährlich Manipulationen am DAX... 141 7 Im Labyrinth des Minotaurus... 187 8 Pokern... 235 A Visual C# 2010 Express... 327

Der Name Galileo Press geht auf den italienischen Mathematiker und Philosophen Galileo Galilei (1564 1642) zurück. Er gilt als Gründungsfigur der neuzeitlichen Wissenschaft und wurde berühmt als Verfechter des modernen, heliozentrischen Weltbilds. Legendär ist sein Ausspruch Eppur se muove (Und sie bewegt sich doch). Das Emblem von Galileo Press ist der Jupiter, umkreist von den vier Galileischen Monden. Galilei entdeckte die nach ihm benannten Monde 1610. Gerne stehen wir Ihnen mit Rat und Tat zur Seite: judith.stevens@galileo-press.de bei Fragen und Anmerkungen zum Inhalt des Buches service@galileo-press.de für versandkostenfreie Bestellungen und Reklamationen julia.bruch@galileo-press.de für Rezensions- und Schulungsexemplare Lektorat Judith Stevens-Lemoine Fachgutachten Thomas Theis, Monschau Korrektorat Friederike Daenecke, Zülpich Cover Barbara Thoben, Köln Coverillustration Graham Geary, Boston Typografie und Layout Vera Brauner Herstellung Frauke Kaiser Satz Typographie & Computer, Krefeld Druck und Bindung Bercker Graphischer Betrieb, Kevelaer Dieses Buch wurde gesetzt aus der Linotype Syntax Serif (9,25/13,25 pt) in FrameMaker. Gedruckt wurde es auf chlorfrei gebleichtem Offsetpapier. Bibliografische Information der Deutschen Nationalbibliothek Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über http://dnb.d-nb.de abrufbar. ISBN 978-3-8362-1484-1 Galileo Press, Bonn 2010 1. Auflage 2010 Das vorliegende Werk ist in all seinen Teilen urheberrechtlich geschützt. Alle Rechte vorbehalten, insbesondere das Recht der Übersetzung, des Vortrags, der Reproduktion, der Vervielfältigung auf fotomechanischem oder anderen Wegen und der Speicherung in elektronischen Medien. Ungeachtet der Sorgfalt, die auf die Erstellung von Text, Abbildungen und Programmen verwendet wurde, können weder Verlag noch Autor, Herausgeber oder Übersetzer für mögliche Fehler und deren Folgen eine juristische Verantwortung oder irgendeine Haftung übernehmen. Die in diesem Werk wiedergegebenen Gebrauchsnamen, Handelsnamen, Warenbezeichnungen usw. können auch ohne besondere Kennzeichnung Marken sein und als solche den gesetzlichen Bestimmungen unterliegen.

Inhalt 1 Einleitung... 9 1.1 Grundlegendes zu diesem Buch... 10 1.2 Abseits von Klassen und Methoden... 10 1.3 Eine notwendige Frage: Die Zielgruppe?... 11 2 Die Sache mit.net... 13 2.1 Intelligent, aber nicht unergründlich das.net-framework... 14 2.1.1 Sprachgewaltig: die Laufzeitumgebung... 14 2.1.2 Ein Meer von Klassen die Base Class Library (BCL)... 15 2.2 Zwischengeschoben der IL-Code... 17 2.2.1 Kein Fabelwesen der Jitter... 18 2.3 Ein Raum ohne Tür der Namensraum... 20 2.4 Ein Wort wie ein Kosename Assembly... 21 2.5 Die»digitale Müllabfuhr«der Garbage Collector... 24 2.6 Das Salz in der Suppe Steuerelemente... 27 2.7.NET und kein Ende?... 29 2.8 Aus der Art geschlagen die Sprache C#... 29 2.8.1 Musik im Namen... 30 2.8.2 Ein Kessel Buntes die Ursprünge der.net-sprache C#... 31 2.8.3 Ein heikler Punkt Pointer... 31 2.8.4 Ein geheimnisvoller Verein Delegates... 35 2.9 Ereignisbehandlung... 39 3 Ausgeschlafen das Wecker-Tool... 41 3.1 Als der Computer die Zeit entdeckte... 42 3.2 Die Entwicklung der Bedienoberfläche... 45 3.2.1 Anlegen eines neuen Projekts... 47 3.2.2 Die benötigten Steuerelemente... 50 3.2.3 Ein EventHandler für das Beenden der Anwendung...... 52 3.2.4 Implementierung und Test der Zeitanzeige... 53 3.2.5 Von der Zeitanzeige zur Implementierung einer Uhr... 55 3.2.6 Zahlen für das»numericupdown«-control... 57 3.2.7 Mehr Lärm als Melodie»tada«und»ir«... 58 3.2.8 In einem Aufwasch Einstellen der Weckzeit und Auslösen des Wecktons... 60 3.2.9 Stop and Go das Beenden des Wecktons... 64 3.3 Hätten Sie s gewusst?... 68 5

Inhalt 4 Alles Täuschung oder was? Herr Hermann und sein Gitter... 69 4.1 Die Entdeckung der geheimnisvollen Punkte... 69 4.1.1 Kaffeestunde beim Optiker woher die Punkte kommen... 71 4.2 Entwicklung der Benutzeroberfläche... 72 4.2.1 Was beabsichtigt ist... 72 4.2.2 Die beteiligten Controls... 73 4.3 Entwicklung der Programmierlogik... 76 4.3.1 Viel Aufwand für den Hintergrund... 77 4.3.2 Zeichnung und Positionierung der Gitterquadrate... 79 4.3.3 Der Schalter für das Hermann-Gitter... 82 4.3.4 Ganz schön blass geworden die Regelung des Alpha-Werts... 83 4.3.5 Aus groß mach klein Skalierung der Quadrate durch ein TrackBar-Steuerelement... 86 4.3.6 Die Verhältnisse auf den Kopf gestellt Umkehrung der Farben... 94 4.4 Hätten Sie s gewusst?... 99 5 Mit Argusaugen der nächtliche Sternenhimmel... 101 5.1 Wie alles begann Stippvisite in Padua... 101 5.2 Subtil und verspielt wo wir hin wollen... 103 5.2.1 Weitere Anforderungen an die Anwendung... 105 5.3 Entwicklung der Benutzeroberfläche... 105 5.4 Entwicklung der Programmierlogik... 108 5.4.1 Ein Klasse mit Ambitionen Creating... 111 5.4.2 Zurück zur Klasse»Form1«... 118 5.4.3 Sterne der 1. Kategorie... 119 5.4.4 Sterne der 2. Kategorie... 122 5.4.5 Zu guter Letzt ein Stern der 3. Kategorie... 129 5.4.6 Verzögertes Schließen der Anwendung... 134 5.4.7 Aufgehoben ist nicht aufgeschoben die Klasse»DelayTime«... 134 5.5 Hätten Sie s gewusst?... 140 6 Garantiert ungefährlich Manipulationen am DAX... 141 6.1 Im Schmelztiegel des großen Geldes... 141 6.1.1 Xetra das elektronische Hirn der Börse... 143 6.1.2 Am Puls der Wirtschaft der DAX... 143 6

Inhalt 6.2 Was angedacht ist... 144 6.3 Entwicklung der Benutzeroberflächen... 146 6.3.1 Das Fenster»Data«... 146 6.3.2 Das Fenster»DAX«... 150 6.4 Entwicklung der Programmierlogik... 151 6.4.1 Das große Zeichnen die Klasse»Chart«... 159 6.5 Hätten Sie s gewusst?... 184 7 Im Labyrinth des Minotaurus... 187 7.1 Und dann kam Dijkstra...... 188 7.1.1 Ein Quäntchen Graphentheorie... 189 7.1.2 Dijkstra in Worten... 191 7.1.3 Listenplätze... 192 7.2»Verworrene«Absichten... 192 7.2.1»Schwaches Knotenkriterium«... 194 7.2.2 Nullsummenspiel... 195 7.2.3 Wie es weiter geht... 195 7.3 Entwicklung der Benutzeroberfläche... 196 7.3.1 Ein Fall für sich das»tablelayoutpanel«... 196 7.3.2 Labels am laufenden Band... 198 7.3.3 Drei Buttons und ein Textfeld... 200 7.4 Entwicklung der Programmierlogik... 201 7.4.1 Gute Eigenschaften... 202 7.4.2 Definition der Knoten im EventHandler»button1_Click()«... 206 7.4.3 Ausblenden der Knoten im EventHandler»button2_Click()«... 209 7.4.4 Die Schaltfläche zum kürzesten Weg... 210 7.5 Hätten Sie s gewusst?... 234 8 Pokern... 235 8.1 Die Hand am Colt Five Card Draw... 236 8.1.1 Die Regeln beim Five Card Draw... 237 8.1.2 Gewichtete Hände... 238 8.2 Draw Poker Light unser Spiel... 240 8.2.1 Die Wahl des Gegners... 240 8.2.2 Erzwungener Tausch... 241 8.2.3 Die Frage des Geldes... 241 8.3 Entwicklung der Benutzeroberfläche... 241 8.3.1 Vom Ordner zur Bedienoberfläche... 242 7

Inhalt 8.4 Entwicklung der Programmierlogik... 253 8.4.1 Addition und Subtraktion der Ereignisbehandler»numericUpDown1_ValueChanged()«... 254 8.4.2 PictureBoxen aufgelistet die Methode»pictureboxList()«... 256 8.4.3 Einsatz des Kartengebers... 256 8.4.4 Basisarbeit die Klasse»kartenListe«... 259 8.4.5 Zurück in der Klassendatei»Poker.js«... 270 8.4.6 Tauschgeschäfte 1 EventHandling für fünf PictureBoxen... 274 8.4.7 Tauschgeschäfte 2 die Klasse»tauscheKarten«... 276 8.4.8 Tauschgeschäfte 3 das finale Ereignis... 283 8.4.9 Reduzierte Menge die Klasse»kartenKombinationen«... 286 8.4.10 Wie viel auf dem Spiel steht die Struktur»wertigkeitHand«... 289 8.4.11 Schnelles Plätzetauschen die Klasse»permutKarten«... 294 8.4.12 Gewonnen oder verloren die Klasse»evaluiereHand«... 307 8.4.13 Letzte Schritte im EventHandler»tauschen_Click()«... 315 8.4.14 Die»Konditionierung«des Spiels... 322 8.4.15 Mit»this«und»Close()«zum geschlossenen Fenster... 324 8.5 Hätten Sie s gewusst?... 324 8.6 Zum guten Schluss... 325 A Visual C# 2010 Express... 327 A.1 Anwendungen, die mit Visual C# 2010 Express erstellt werden können... 327 A.2 Reduzierter Funktionsumfang... 328 A.3 Neues bei Visual C# 2010 Express... 329 A.4 Der Weg zu Visual C# 2010 Express... 330 A.4.1 Was ist ein ISO-Image?... 331 A.4.2 Brennen einer Visual C# 2010 Express-CD... 331 A.4.3 Die Alternative virtuelle Festplatte... 334 A.5 Installation von Visual C# 2010 Express... 335 A.6 Das Prinzip der integrierten Entwicklungsumgebung... 336 A.6.1 Projekte mit System... 337 A.6.2 Quell- versus Entwurfsmodus... 338 A.6.3 Unverzichtbar das»eigenschaften«-fenster... 338 A.7 Veröffentlichung einer Anwendung... 339 Index... 343 8

Wenn Baumeister Gebäude bauten, so wie Programmierer Programme schreiben, dann würde der erste Specht, der vorbeikommt, die Zivilisation zerstören. (Verfasser unbekannt) 1 Einleitung»Coding for Fun mit C#«kann Sie, liebe Leserinnen und Leser, leider nicht in die Situation versetzen, ein Programm zu entwickeln, das New Yorks riesige Ampelschar koordiniert. Auch werden Sie am Ende der Lektüre nicht befähigt sein, Klassen, Methoden und Eigenschaften zu entwickeln, die im sinnvollen Zusammenspiel das erste Vorhandensein Ihres Geburtsjahrs im Nachkommabereich der unendlichen, weil irrationalen Zahl Pi ermitteln. Und auch die immerhin 500 000 Zeilen lange, jedoch keineswegs fehlerfreie Flugsoftware des betagten Space Shuttle (die in HAL, einer FORTRAN-ähnlichen Sprache implementiert ist) werden Sie nach dem Durcharbeiten der Lektüre nicht so ohne Weiteres auf C# portieren können. Das alles ist auch nicht unbedingt Ihre Erwartung? Gut so, denn das angenehm Knifflige eines programmiertechnischen Problems wächst nicht zwangsläufig mit der Dimension der definierten Aufgabe. Natürlich verfällt dieses Buch auch nicht ins Gegenteil. Aus dem zerstörerischen Specht wird nicht klammheimlich eine Biene werden. Die Mauern der Zivilisation stürzen nicht ein, weil Sie womöglich genötigt werden, wild darauflos zu programmieren. Ihr Wohlergehen ist demnach nicht gefährdet. Und vielleicht, ja vielleicht empfinden Sie nach sorgfältigem Durcharbeiten eines, mehrerer oder gleich aller Beispiele erst recht ein gewisses Unverständnis gegenüber dem sicherlich übertriebenen Zitat zu Beginn dieses Vorworts. Der kleine Anleser dürfte Sie darüber hinaus eher an die Zeiten bester»spaghetti-codierung«erinnern, als das Objekt der gesamte Quellcode und alles irgendwie eine zumindest aus heutiger Sicht schmunzelwürdige Klasse für sich war. Bei uns wird es beträchtlich strukturierter zugehen, was sich allein schon aus der Sprache ergibt, die zum Einsatz kommt: C#. 9

1 Einleitung 1.1 Grundlegendes zu diesem Buch Praxisorientierte IT-Literatur folgt im Wesentlichen zwei Richtungen. Die eine mündet im Entwicklungsprozess eines ausführlichen Praxisbeispiels, die andere in mehreren, thematisch voneinander abgegrenzten Programmen. Beide Ansätze haben sowohl ihre didaktische Berechtigung als auch nicht zu unterschätzende Vorteile.»Coding for Fun mit C#«verwirklicht das zweite Konzept. Inhaltlich wohlunterscheidbare, vollkommen unabhängige Praxisbeispiele geben Ihnen die Möglichkeit, sich entweder erfolgreich auf gleich mehreren oder auf ausgesuchten Feldern zu versuchen. Terra incognita bleibt da nichts, wenn Sie das nicht wollen. Ganz gleich, ob Sie gern ein Wecker-Tool entwickeln, das angenäherte Abbild des abendlichen Sternenhimmels implementieren oder sich auf dem Bildschirm Punkte ansehen möchten, die Ihnen das Auge (selbst das fehlerfreie) vorgaukelt; diesbezüglich und darüber hinaus bleibt Ihre Suche nach Interessantem nicht erfolglos. Und schließlich: Ein wenig Fantasie, gepaart mit der Fähigkeit zur Extrapolation, vorausgesetzt, kann jedes der Praxisbeispiele auf eigene Szenarien übertragen werden. Sie müssen keine DAX-Kurve mögen. Irgendetwas wird sich aber sicher finden, das Sie gerne als Chart dargestellt sähen. Vielleicht können Sie sogar auf diese Weise darstellen, wie oft Sie bei jedem Kapitel gedacht haben:»das hätte ich aber anders gemacht.«es stimmt ja auch! Doch bitte: Viele Wege führen nach Rom auch Programmierwege. Ferner wurden die Beispiele mit dem Anspruch gewählt, dass die Codierung möglichst einfach nachvollziehbar sein soll. Dass dieser Anspruch zuweilen auf Kosten dessen geht, was man als Programmierästhetik bezeichnen könnte, räume ich an dieser Stelle (mit der Bitte um Nachsicht) ein. In dem Zusammenhang erinnere ich mich jedoch gerne an die Bemerkung eines Kommilitonen, nach der nicht für jede Addition eine eigene Klasse entwickelt werden muss. Er hatte recht, obgleich ich ihm damals nicht so ohne Weiteres beipflichten mochte. 1.2 Abseits von Klassen und Methoden Ihr literarischer Neuerwerb ist kein Fachbuch. Wenigstens keines im klassischen Sinne. Alles Wissensnotwendige erfahren Sie natürlich dennoch, eingeleitet durch kurzweilig gehaltene Informationen, die das jeweilige Programmiervorhaben einleiten. So schadet es nicht, wenn Sie beispielsweise etwas von der lange zurückliegenden Existenz eines computerähnlichen Geräts erfahren, das in einer ganz eigenen Beziehung zur Zeit stand. Auch wenn technische Welten Ihren und meinen Computer von jenem Exponat der Frühzeit trennen, so ist der Abstand 10

Eine notwendige Frage: Die Zielgruppe? 1.3 zwischen den am Abendhimmel sichtbaren Fixsternen und Ihren Augen noch viel größer. Wie sich Galileo den vermeintlich unendlichen Weiten näherte selbst darüber erfahren Sie mehr. 1.3 Eine notwendige Frage: Die Zielgruppe? Die Zielgruppe des Buches sind vor allem Sie. Warum? Weil Sie ein grundlegendes Interesse an den sogenannten.net-sprachen (über den Begriff wird noch zu schreiben sein) im Allgemeinen und der.net-sprache C# im Speziellen haben. Weil Sie bereits mit dem Besuch einer einführenden Vorlesung, eines Seminars oder/und durch literaturgestütztes Selbststudium einen Schritt weitergegangen sind. Gefolgt von einem weiteren Schritt, indem Sie einfach angefangen haben zu programmieren. On the fly! Weil Ihnen das Prinzip der objektorientierten Programmierung im Zusammenhang mit C# aus unerfindlichen Gründen reizvoll erscheint. Durch Letzteres wird Ihnen natürlich (und sicher zu Recht) unterschwellig unterstellt, mehr über objektorientiertes Programmieren zu wissen, als einführende Beispiele zur Beschreibung einer Klasse in der Regel vermitteln. Die zum Objekt verkommene Katze werden Sie demnach in diesem Buch ebenso vergebens suchen wie die in private oder öffentliche Methoden gebannten Gewohnheiten des schnurrenden Vierbeiners. Über Derartiges sind Sie zwar nicht erhaben, gleichwohl fachlich weit hinaus. Es ist also an der Zeit, die Katze aus dem Sack zu lassen. 11

Künstliche Intelligenz ist gar nichts verglichen mit natürlicher Dummheit. (Verfasser unbekannt) 2 Die Sache mit.net Auch nach über sieben Jahren ist.net (zum Zeitpunkt der Niederschrift dieses Textes war Version 4.0 aktuell) oder, um es korrekt zu formulieren, die.net- Technologie, ein kleines Mysterium geblieben. Doch leider ist ohne.net nicht gut mit C-Sharp (C#) programmieren, und ohne einen Fundus an Grundwissen braust Ihr sicher vorhandener Elan an den Möglichkeiten des mächtigen Frameworks vorbei. Framework? Damit ist natürlich das.net-framework gemeint, und was es damit auf sich hat, darum werden wir uns im Folgenden kümmern. Stiefmütterlich behandelt werden dagegen Webservices sowie der.net Enterprise Server. Beide spielen für die Entwicklung der Sie erwartenden Praxisbeispiele nämlich keine Rolle und somit auch nicht für Ihren literarischen Neuerwerb. Abgesehen davon ist das.net-framework primärer Bestandteil von.net, und so betrachtet, kann es nicht falsch sein, mit.net zunächst das.net-framework zu verbinden oder die beiden Begriffe sogar synonym zu verwenden. In der Zusammenfassung noch einmal: Bestandteile der viel gepriesenen.net- Technologie sind:.net-framework Webservices.NET Enterprise Server Für uns ist, wie ich bereits erwähnt habe, lediglich das.net-framework von Belang. Würden wir Webservices und.net Enterprise Server mit ins Boot nehmen, hielten Sie ein praxisorientiertes Buch über die.net-technologie in den Händen. Trösten Sie sich: Das.NET-Framework allein füllt mühelos die Seiten kiloschwerer, mitunter schwer verdaulicher Fachbücher. Dasselbe komplexe Thema betreffend, begnügen wir uns mit vergleichweise wenigen Seiten, denn weniger ist manchmal (allerdings nicht immer) mehr. Vor allem dann, wenn die Intention des Buches eine etwas andere ist. 13

2 Die Sache mit.net Trivial wird es auf den folgenden Seiten gleichwohl nicht. Es geht nicht anders! Denn Sie sollten zumindest im Groben wissen, auf welcher softwaretechnischen Grundlage die Praxisbeispiele aufgesetzt sind. Schließlich unternehmen Sie mit Ihrem hypothetischen Wunschauto auch keine Probefahrt, ohne sich für die Raffinessen des vierrädrigen Objekts zu interessieren (und gegebenenfalls zu begeistern). Alles werden wir gleichwohl nicht besprechen können. Einige der wichtigsten Konzepte dagegen schon. 2.1 Intelligent, aber nicht unergründlich das.net-framework Die Frage, was unter dem.net-framework primär zu verstehen ist, führt beinahe zwangsläufig zu anderen, nicht immer tauglichen Begriffen: konzeptionelle Plattform Softwareplattform Klassenbibliothek Programmiermodell All das haben Sie mit Sicherheit schon irgendwo gelesen. Und nichts von dem ist selbstredend falsch (schlechtestenfalls ist es unvollständig). Fragen wir deshalb anders: Was ist der springende Punkt beim.net-framework? Oder gibt es sogar mehrere? 2.1.1 Sprachgewaltig: die Laufzeitumgebung Das.NET-Framework ist bedeutend mehr als eine Klassenbibliothek (und sei diese auch noch so groß). Im Wort Framework steckt schließlich neben Frame auch das Wort Work. Hier arbeitet notwendigerweise etwas, nämlich die Laufzeitumgebung (englisch Runtime Environment), genauer gesagt eine programmiersprachenunabhängige Laufzeitumgebung, die als Common Language Runtime oder kurz CLR bezeichnet wird. Die können Sie sich getrost als Computer im Computer (eine Art virtuelle Maschine also) vorstellen. Abbildung 2.1 zeigt schematisch den Aufbau der CLR. 14

Intelligent, aber nicht unergründlich das.net-framework 2.1 Base Class Library (BCL-Support) COM Marshaler Thread Support Type Checker Exeption Manager Debug Engine Security Engine IL to Native Computer Code Manager Garbage Collector Class Loader Abbildung 2.1 Vereinfachter schematischer Aufbau der Common Language Runtime (CLR) 2.1.2 Ein Meer von Klassen die Base Class Library (BCL) Ganz oben in Abbildung 2.1entdecken Sie die Base Class Library (BCL). So oft der Name auch in allen möglichen und schematischen Darstellungen zu finden ist, so wenig aktuell ist er in Wahrheit. Microsoft selbst spricht lieber von der.net Framework Class Library (FCL), was sogleich die Frage aufwirft, wo in der Abkürzung das.net abgeblieben ist. NFCL wäre genauer, allein schon deshalb, weil es neben dem.net-framework auch andere Frameworks gibt, nicht zuletzt den ewigen Konkurrenten Java mit seinem etablierten Runtime Environment (JRE). Anscheinend steckt jedoch mehr hinter der namentlichen Verwirrung, gibt es doch im Hause Microsoft an der Entwicklung des.net-frameworks beteiligte Programmierer (auf einen werden wir noch zurückkommen), die die BCL als Teil der FCL betrachten. Demnach wird also zwischen BCL und FCL unterschieden. Und wenn wir schon mal dabei sind, Konfusion zu erzeugen: Bei Ihrer Beschäftigung mit.net wird Ihnen auch die Abkürzung CL begegnen, womit nichts anderes als die BCL gemeint ist. Schließen wir Frieden mit dem Namen- und Abkürzungswirrwarr, denn ändern lässt es sich gerade in einer wissenschaftlich-technischen Umgebung nicht, die von Anglizismen und Abkürzungen nur so wimmelt. 15

2 Die Sache mit.net Ganz gleich, ob Sie Windows-, Webanwendungen oder Webservices entwickeln möchten, an der Klassenbibliothek des.net-framework ist nur schwer vorbeizukommen. Nach was, glauben Sie, werden Sie im Installationsverzeichnis des.net-frameworks (in der Regel C:\WINDOWS\Microsoft.NET\Framework\) im Falle der, sagen wir, BCL suchen müssen? Nach einem oder gar mehreren Ordnern, gefüllt mit zahlreichen, unzusammenhängenden Klassendateien, in womöglich noch alphabetischer Reihenfolge? So wird es vielleicht irgendwann angefangen haben, als sich zur Laufzeit eines Programms im Wesentlichen nichts anderes vollzog als der Lauf des Programms. Klassenbibliotheken können (und das ist in der Regel der Fall) auch zur Laufzeit eingebunden werden (vereinzelt spricht man auch, und nicht frei von unfriedlichen Assoziationen, vom Nachladen der Bibliothek), womit wir es dann mit einer Dynamic Link Library (DLL) zu tun hätten, die Sie an der gleichlautenden, wenngleich zumeist kleingeschriebenen Dateiendung (.dll) erkennen. Statisch oder dynamisch? Faustischen Ursprungs ist die Frage zwar nicht, allerdings auch nicht unbedeutend. Programme, die auf DLLs zurückgreifen, sind zumeist kleiner als jene, die sich mit einer statischen Bibliothek begnügen (solche Programme werden tatsächlich noch geschrieben) einfach weil der Code auf mehrere Dateien verteilt werden kann. Dagegen erfolgt das Hinzubinden einer statischen Bibliothek zum Programm zur Übersetzungszeit, mit der leicht zu erahnenden Konsequenz, dass die ausführbare Datei (.exe) vergrößert wird. Dafür wird nichts nachgeladen. Im Kontext der BCL sind zwei Dateien (und aus mehr Files besteht die Base Class Library erstaunlicherweise nicht) mit der Endung.dll von einiger Bedeutung: system.dll mscorlib.dll Beide Dateien sind mit im Mittel 3,5 MB wahrlich keine Leichtgewichte, was bei der Anzahl der in ihnen enthaltenen Klassen auch nicht verwundert. Gezählt habe ich sie nicht. Es werden einige Tausend sein, deren Aufgaben sich gleichwohl gut gruppieren lassen. Die beiden Dateien system.dll und mscorlib.dll enthalten: Basisdatentypen IO-Funktionen (Input/Output) Netzwerkfunktionen Reflection-API 16

Zwischengeschoben der IL-Code 2.2 COM-Interoperabilität Remoting Sicherheitskonfiguration Threading Zugriff auf Teile des Windows-Systems 2.2 Zwischengeschoben der IL-Code Die Unterstützung der Base Class Library (siehe Abbildung 2.1) ist Teil der Laufzeitumgebung (CLR), ohne die es schwierig wird, den in einer beliebigen Programmiersprache entwickelten Code auszuführen. Früher war mit dem Wechsel der Programmiersprache zwangsläufig ein Wechsel der Laufzeitumgebung verbunden, woran sich im Grunde nichts geändert hat bis auf die erfolgreiche Sache mit.net, wo eine Laufzeitumgebung gleich mehrere Sprachen bedient (nämlich die sogenannten.net-sprachen, u. a. auch das von uns gewählte C#). Ein intelligentes Konzept, fürwahr, nur: Warum funktioniert es so gut? Es hilft nichts, wir müssen noch weiter ins Kellergewölbe des.net-frameworks vordringen. Verstaubtes erwartet Sie dort nicht, wohl aber eine weitere, softwaretechnische Raffinesse. Eine stattliche Hürde Das Problem ist schlicht, einen in C# entwickelten Programmcode gleichermaßen für die Laufzeitumgebung des.net-frameworks verständlich zu machen, wie die potenziell in Visual Basic.NET oder einer anderen.net-sprache (z. B. C++.NET) entwickelten Sourcen. Die CLR spricht nur eine Sprache,.NET-Sprachen dagegen gibt es gleich mehrere. Zum Glück! Was es leider auch gibt, ist ein Problem. Um zu verhindern, dass sich die Laufzeitumgebung an der Mehrsprachigkeit des.net-frameworks nachhaltig»verschluckt«, wird der Runtime Environment ein Zwischencode serviert, der IL- oder MSIL-Code genannt wird. (IL steht für Intermediate Language, MSIL für Microsoft Intermediate Language.) Anders formuliert: Die CLR weiß nichts vom relativen Sprachreichtum der Codierung, die ausgeführt werden soll. Die Laufzeitumgebung befasst sich lediglich mit dem IL- Code. Bleibt die Frage zu klären, was der ominöse IL-Code eigentlich ist. Kurze Antwort: Es ist Bytecode. Und der besteht aus nichts anderem als aus Befehlen für eine virtuelle Maschine. Das Schöne am Bytecode (der auch P-Code genannt wird) ist die Unabhängigkeit vom Prozessor, was so formuliert ein wenig geschönt ist, verhält es sich doch eher so, dass der Bytecode vom physischen Prozessor nicht verstanden werden kann. Prozessorunabhängigkeit? So kann man es 17

2 Die Sache mit.net also auch nennen. Was die CPU Ihres und meines Computers versteht, sind Maschinenbefehle (man spricht auch von Native Code), die wiederum vom Typ des Prozessors abhängig sind. Dennoch ist das Thema Zwischencode damit nicht abgehandelt, denn nur wenig ist so einfach, wie es dem Titel dieses Buches geschuldet beschrieben werden sollte. Kurz mal verschnaufen, und dann folgt ein vermeintlich überflüssiger Satz: Die Übersetzung einer C#-Anweisung in den IL-Code (Zwischencode) übernimmt der Compiler. Im Falle der Sprache C# verbirgt sich der Compiler in der Datei csc.exe, die Sie, abhängig vom Ort der Installation, irgendwo in den unergründlichen Tiefen des.net-frameworks finden. Wenn es aber mehrere.net-sprachen, einen Zwischencode und eine Laufzeitumgebung gibt, muss es notwendigerweise auch mehrere Compiler geben, genau für jede der.net-sprachen einen. Dem ist auch so. Metadaten Neben dem IL-Code generieren die Compiler spezielle Informationsdaten. Diese sogenannten Metadaten beinhalten Informationen über Typen, Elemente oder Verweise, die für das C#-Programm auf die ein oder andere Art wichtig sind. Schließlich muss die Laufzeitumgebung beispielsweise wissen, wann eine Klasse oder ein anderes Programmelement geladen werden soll. Metadaten werden zur Laufzeit des Programms ausgelesen. Dazu bedarf es spezieller Klassen, die unter dem Namen Reflection API bekannt sind. Selbst wenn es keine Metadaten gäbe: Fühlen Sie sich nicht zu sehr an Ihre Beschäftigung mit dem klassischen, in Native Code übersetzenden Compiler erinnert! Denn die hier angesprochenen»compiler«kompilieren nicht in den Maschinencode, sondern in den IL-Code, P-Code, Bytecode oder welchen Namen Sie auch immer dem begabten Kind geben mögen. Auf alle Fälle ist der Zwischencode eben nicht für einen physikalischen Prozessor bestimmt. 2.2.1 Kein Fabelwesen der Jitter Die Weiterverarbeitung des IL-Codes könnte durchaus eine Art Interpreter erledigen, der den Code einliest, analysiert und schlussendlich ausführt. Der Nachteil eines Interpreters? Die Geschwindigkeit. Der Vorteil des interpretierten Codes: die weitgehende Unabhängigkeit von der Architektur des Rechners (zumindest dann, wenn der Interpreter selbst in C oder einem C-Dialekt geschrieben ist). Als Alternative käme der Einsatz eines klassischen Compilers in Betracht. Der Vorteil der Kompilierung: eine höhere Geschwindigkeit, denn Native Code ist nicht langsam. Der Nachteil? Tja, überlegen Sie! Maschinencode ist prozessorabhängig, somit erführe das.net-framework einen merklichen Ruck in Richtung 18

Zwischengeschoben der IL-Code 2.2 Plattformabhängigkeit. Genau die gilt es zu vermeiden, mehr noch als eine langsame Ausführungsgeschwindigkeit. Eine Software, für die erst das Motherboard und/oder der Prozessor ausgetauscht werden müssen, wird nur schwerlich den Weg aus den Regalen des Herstellers finden. (Bei Computerspielen sieht das schon anders aus: Das nächste Weihnachtsfest kommt bestimmt.) Was bleibt, ist die Vereinigung der Vorteile von Interpreter und Compiler. Was dabei herausgekommen ist, wird umgangssprachlich Jitter genannt. Großzügig betrachtet, leitet sich der Begriff aus dem sperrig klingenden Just-In-Time-Compiler (kurz JIT-Compiler) ab. Wenn Sie sich den als Flasche vorstellen, ist in dieser allerdings beträchtlich mehr Compiler als Interpreter vorhanden. Drehen Sie das Behältnis um, um die Geister herauszulassen, tritt auch sogleich der Compiler in Aktion, genauer betrachtet allerdings nur dann, wenn Ihr Programm tatsächlich ausgeführt wird. Das Just-In-Time geht allerdings noch weiter: Ein Programm besteht (auch im weiteren Sinne) aus Modulen. Wird lediglich das Modul A verwendet, ist die Übersetzung des Moduls B (zunächst) überflüssig. Demnach ist nur das aktuell Benötigte zu kompilieren zur Laufzeit und gerade noch rechtzeitig. Eben just in time. Quellcode (Sourcecode) Compiler (z.b. csc.exe) IL-Code zuzüglich Metadaten JIT-Compiler Native Code Abbildung 2.2 Vom Quellcode zum Native Code die Schritte bis zur Ausführung eines C#-Programms 19