Einführung in das Programmieren mit C# 2 - uni-trier.de · PDF fileVorwort Dieses...

download Einführung in das Programmieren mit C# 2 - uni-trier.de · PDF fileVorwort Dieses Manuskript entstand als Begleitlektüre zum C# - Einführungskurs, den das Universitäts-Rechenzentrum

If you can't read please download the document

Transcript of Einführung in das Programmieren mit C# 2 - uni-trier.de · PDF fileVorwort Dieses...

  • B. Baltes-Gtz

    Einfhrung in das Programmieren mit

    C# 2.0

    2007.12.06

  • Herausgeber: Universitts-Rechenzentrum Trier

    Universittsring 15 D-54286 Trier WWW: http://www.urt.uni-trier.de/ E-Mail: [email protected] Tel.: (0651) 201-3417, Fax.: (0651) 3921

    Leiter: Dr. Peter Leinen Autor: Bernhard Baltes-Gtz (E-Mail: [email protected]) Copyright 2007; URT

  • Vorwort Dieses Manuskript entstand als Begleitlektre zum C# - Einfhrungskurs, den das Universitts-Rechenzentrum Trier (URT) ber zwei Semester (WiSe 2006/2007 - SoSe 2007) angeboten hat, sollte aber auch fr das Selbststudium geeignet sein. Lerninhalte und -ziele C# ist eine von der Firma Microsoft fr das so genannte .NET Framework entwickelte, mittler-weile von der European Computer Manufacturers Association (ECMA) standardisierte Program-miersprache, die auf den Vorbildern Java und C++ aufbaut, aber auch etliche Weiterentwicklungen bietet. Es ist zu erwarten, dass die .NET - Plattform bei der Softwareentwicklung unter Windows in den nchsten Jahren stark an Bedeutung zunehmen wird. Auf dem EDV-Arbeitsmarkt ist bereits jetzt ein deutliches Interesse an .NET und an der hier bevorzugten Programmiersprache C# festzu-stellen. Durch das Mono-Projekt der Linux-Szene sind .NET-Programme keinesfalls auf die Win-dows-Welt beschrnkt. Der Kurs behandelt wesentliche Konzepte und Methoden der objektorientierten Softwareentwick-lung (z.B. Klassen, Vererbung, Polymorphie, Interfaces), bercksichtigt aber auch viele Standard-themen der Programmierpraxis (z.B. Dateizugriff, Netzwerk, Multithreading, grafische Benutzer-oberflchen, Grafikausgabe, Datenbankprogrammierung, Druckausgabe etc.). Voraussetzungen bei den Leser(innen)

    EDV-Allgemeinbildung Dass die Leser(innen) wenigstens durchschnittliche Erfahrungen bei der Anwendung von Computerprogrammen haben sollten, versteht sich von selbst.

    Programmierkenntnisse werden nicht vorausgesetzt. Motivation

    Generell ist mit einem erheblichen Zeitaufwand bei der Lektre und bei der aktiven Ausei-nandersetzung mit dem Stoff (z.B. durch das Lsen von bungsaufgaben) zu rechnen.

    Software zum ben Fr die unverzichtbaren bungen sollte ein Rechner zur Verfgung stehen, auf dem das .NET Framework der Firma Microsoft in einer Version ab 2.0 installiert ist. Auerdem empfiehlt sich die Verwendung einer Entwicklungsumgebung, z.B. Microsoft Visual Studio 2005 Express Edition oder Sharp Develop 2. Die erwhnte Software ist kostenlos verfgbar, kann also auch auf einem Privat-PC ohne Investitionen genutzt werden. Nhere Hinweise zur Installation und zur Verwendung der Software folgen in Abschnitt 2. Dateien zum Kurs Die aktuelle Version dieses Manuskripts ist zusammen mit den behandelten Beispielen und L-sungsvorschlgen zu vielen bungsaufgaben auf dem Webserver der Universitt Trier von der Startseite (http://www.uni-trier.de/) ausgehend folgendermaen zu finden:

    Rechenzentrum > Studierende > EDV-Dokumentationen > Programmierung > Einfhrung in das Programmieren mit C#

    Leider blieb mir zu wenig Zeit fr eine sorgfltige Kontrolle des Texts, so dass einige Fehler und Mngel verblieben sein drften. Entsprechende Hinweise sind sehr willkommen! Trier, im Oktober 2007 Bernhard Baltes-Gtz

  • Inhaltsverzeichnis

    1 EINLEITUNG 1

    1.1 Beispiel fr die objektorientierte Softwareentwicklung mit C# 1 1.1.1 Objektorientierte Analyse und Modellierung 1 1.1.2 Objektorientierte Programmierung 5 1.1.3 Algorithmen 7 1.1.4 Startklasse und Main()-Methode 8 1.1.5 Ausblick auf Anwendungen mit graphischer Benutzerschnittstelle 10 1.1.6 Zusammenfassung 10

    1.2 Das .NET Framework 11 1.2.1 Installation 12 1.2.2 C#-Compiler und MSIL 12 1.2.3 Assemblies und Metadaten 14 1.2.4 CLR und JIT-Compiler 17 1.2.5 Namensrume und FCL 18 1.2.6 Zusammenfassung 20

    1.3 bungsaufgaben zu Kapitel 1 21

    2 WERKZEUGE ZUM ENTWICKELN VON C# - PROGRAMMEN 23

    2.1 C# - Entwicklung mit Texteditor und Kommandozeilen-Compiler 23 2.1.1 Editieren 23 2.1.2 bersetzen in MSIL 25 2.1.3 Ausfhren 28 2.1.4 Programmfehler beheben 28

    2.2 .NET SDK 31

    2.3 Integrierte Entwicklungsumgebungen 32 2.3.1 Microsoft Visual Studio 2005 Professional 32

    2.3.1.1 Terminal-Server Umgebung 32 2.3.1.2 Konfiguration beim ersten Start 33 2.3.1.3 Eine erste GUI-Anwendung 35

    2.3.2 Microsoft Visual C# 2005 Express Edition 39 2.3.2.1 Installation 39 2.3.2.2 Ein erstes Konsolen-Projekt 43 2.3.2.3 Referenzen und Ausgabetyp setzen 45

    2.4 SharpDevelop 2.1 47

    2.5 bungsaufgaben zu Kapitel 2 48

    3 ELEMENTARE SPRACHELEMENTE 49

    3.1 Einstieg 49 3.1.1 Aufbau von einfachen C# - Programmen 49 3.1.2 Syntaxdiagramme 50

    3.1.2.1 Klassendefinition 51 3.1.2.2 Methodendefinition 52 3.1.2.3 Eigenschaftsdefinition 52

    3.1.3 Hinweise zur Gestaltung des Quellcodes 53 3.1.4 Kommentare 54 3.1.5 Namen 54 3.1.6 bungsaufgaben zu Abschnitt 3.1 56

  • Inhaltsverzeichnis

    III

    3.2 Ausgabe bei Konsolenanwendungen 56 3.2.1 Unformatierte Ausgabe einer (zusammengesetzten) Zeichenfolge 56 3.2.2 Formatierte Ausgabe 57 3.2.3 bungsaufgaben zu Abschnitt 3.2 58

    3.3 Variablen und elementare Datentypen 58 3.3.1 Klassifikation von Datentypen und Variablen 60 3.3.2 Elementare Datentypen 61 3.3.3 Vertiefung: Darstellung reeller Zahlen im Speicher 63

    3.3.3.1 Binre Gleitkommadarstellung 63 3.3.3.2 Dezimale Gleitkommadarstellung 64

    3.3.4 Variablendeklaration, Initialisierung und Wertzuweisung 66 3.3.5 Blcke und Deklarationsbereiche fr lokale Variablen 67 3.3.6 Konstanten 68 3.3.7 Literale 69

    3.3.7.1 Ganzzahlliterale 69 3.3.7.2 Literale fr reelle Zahlen 70 3.3.7.3 bool-Literale 71 3.3.7.4 char-Literale 72 3.3.7.5 Zeichenkettenliterale 72

    3.3.8 bungsaufgaben zu Abschnitt 3.3 73

    3.4 Einfache Techniken fr Benutzereingaben 74 3.4.1 Via Konsole 74 3.4.2 Via InputBox 75

    3.5 Operatoren und Ausdrcke 77 3.5.1 Arithmetische Operatoren 78 3.5.2 Methodenaufrufe 80 3.5.3 Vergleichsoperatoren 81 3.5.4 Logische Operatoren 84 3.5.5 Vertiefung: Bitorientierte Operatoren 85 3.5.6 Typumwandlung (Casting) 86 3.5.7 Zuweisungsoperatoren 88 3.5.8 Konditionaloperator 89 3.5.9 Auswertungsreihenfolge 90 3.5.10 bungsaufgaben zu Abschnitt 3.5 91

    3.6 ber- und Unterlauf bei numerischen Variablen 93 3.6.1 berlauf bei Ganzzahltypen 93 3.6.2 Unendliche und undefinierte Werte bei den Typen float und double 94 3.6.3 berlauf beim Typ decimal 96 3.6.4 Unterlauf bei den Gleitkommatypen 96

    3.7 Anweisungen 97 3.7.1 berblick 97 3.7.2 Bedingte Anweisung und Verzweigung 98

    3.7.2.1 if-Anweisung 98 3.7.2.2 switch-Anweisung 103

    3.7.3 Wiederholungsanweisungen 107 3.7.3.1 Zhlergesteuerte Schleife (for) 108 3.7.3.2 Iterieren ber Kollektionen (foreach) 109 3.7.3.3 Bedingungsabhngige Schleifen 110 3.7.3.4 Endlosschleifen 112 3.7.3.5 Schleifen(durchgnge) vorzeitig beenden 112

    3.7.4 bungsaufgaben zu Abschnitt 3.7 114

  • Inhaltsverzeichnis

    IV

    4 KLASSEN UND OBJEKTE 117

    4.1 berblick, historische Wurzeln, Beispiel 117 4.1.1 Einige Kernideen und Vorzge der OOP 117

    4.1.1.1 Datenkapselung 117 4.1.1.2 Vererbung 118 4.1.1.3 Realittsnahe Modellierung 119

    4.1.2 Strukturierte Programmierung und OOP 119 4.1.3 Auf-Bruch zu echter Klasse 120

    4.2 Instanzvariablen (Felder) 122 4.2.1 Deklaration mit Wahl der Schutzstufe 122 4.2.2 Konstante und schreibgeschtzte Instanzvariablen 123 4.2.3 Deklarationsbereich und Ablage im Hauptspeicher 124 4.2.4 Initialisierung 124 4.2.5 Zugriff auf Instanzvariablen 125

    4.3 Methoden 126 4.3.1 Methodendefinition 127

    4.3.1.1 Formalparameter 128 4.3.1.2 Modifikatoren 131 4.3.1.3 Rckgabewerte und return-Anweisung 131 4.3.1.4 Methodenrumpf 132

    4.3.2 Methodenaufruf und Aktualparameter 132 4.3.3 Methoden berladen 133

    4.4 Objekte 134 4.4.1 (Wieder)verwendung von Klassen bzw. Objekten 134 4.4.2 Referenzvariablen deklarieren 135 4.4.3 Objekte erzeugen 136 4.4.4 Objekte initialisieren ber Konstruktoren 137 4.4.5 Abrumen berflssiger Objekte durch den Garbage Collector 140 4.4.6 Objekt-Referenzen als Wertparameter 140 4.4.7 Rckgabewerte vom Referenztyp 141 4.4.8 this als Referenz auf das aktuelle Objekt 142

    4.5 Eigenschaften 142

    4.6 Klassenbezogene Member 143 4.6.1 Felder und Eigenschaften 144 4.6.2 Methoden 145 4.6.3 Konstruktoren 146 4.6.4 Klassen 147 4.6.5 Wiederholung zur Kategorisierung von Variablen 147

    4.7 Vertiefungen zum Thema Methoden 148 4.7.1 Rekursive Methoden 148 4.7.2 Operatoren berladen 149

    4.8 Aggregieren und Schachteln von Klassen 151 4.8.1 Aggregation 151 4.8.2 Innere Klassen 153

    4.9 Verfgbarkeit von Klassen und Klassenbestandteilen 154

  • Inhaltsverzeichnis

    V

    4.10 Bruchrechnungsprogramm mit Winforms-Benutzerschnittstelle 155 4.10.1 Projekt mit Vorlage Windows-Anwendung anlegen 155 4.10.2 Steuerelemente aus der Toolbox bernehmen 156 4.10.3 Steuerelemente gestalten 157 4.10.4 Eigenschaften der Steuerelemente ndern 157 4.10.5 Der Quellcode-Generator 158 4.10.6 Assembly mit der Bruch-Klasse einbinden 159 4.10.7 Ereignisbehandlungsmethoden anlegen 160

    4.11 bungsaufgaben zu Kapitel 4 161

    5 WEITERE .NETTE TYPEN 165

    5.1 Strukturen 165 5.1.1 Referenz- versus Wertsemantik 165 5.1.2 Unterschiede zwischen Klassen und Strukturen 168 5.1.3 Zur Eignung von Strukturen im Bruchrechnungs-Projekt 168 5.1.4 Strukturen im Common Type System der .NET Plattform 169

    5.2 Boxing und Unboxing 170

    5.3 Arrays 171 5.3.1 Array-Referenzvariablen deklarieren 172 5.3.2 Array-Objekte erzeugen 172 5.3.3 Arrays benutzen 174 5.3.4 Beispiel: Beurteilung des .NET - Pseudozufallszahlengenerators 174 5.3.5 Initialisierungslisten 176 5.3.6 Objekte als Array-Elemente 176 5.3.7 Mehrdimensionale Arrays 177