SlideShare ist ein Scribd-Unternehmen logo
1 von 78
Downloaden Sie, um offline zu lesen
C# Einführung
- Grundlagen der Programmierung Do, Hoang Viet (do@mi.fu-berlin.de)
Draphony Games (http://www.draphony.de)
Grundlagen
04.12.2013

2
Grundbegriffe in der Entwicklung
• Quellcode
 Entwickler schreiben das Programm in einer Programmiersprache. Dieser Text wird
Quellcode genannt.
 Im Gegensatz zur natürlichen Sprache erfüllen Programmiersprache diverse
Anforderungen, die eine weitere maschinelle Verarbeitung erst ermöglich, u.a.
Eindeutigkeit
•

Gegenbeispiel aus Wikipedia: Jeder Mann liebt eine Frau. (Wikipedia Artikel)

• Compiler
 Der Quellcode muss mit Hilfe eines Programms in einer maschinenlesbare Sprache
übersetzt werden.

04.12.2013

3
Demo: „HelloWorld“
04.12.2013

4
Häufig gemachte Fehler
• C# unterscheidet zwischen Groß- und Kleinschreibung (engl. case-sensible)
 Console.WriteLine ist nicht das selbe wie console.writeline

• Absätze wie Leerzeichen, Tabulatoren sind optional
 In den meisten Fällen, lässt sich der Quellcode auch in einer einzigen Zeile schreiben.
(Daran haben später alle Spaß!)

• Eine Anweisung wird mit einem Semikolon beendet
 Console.WriteLine(“Hello World“);
 int a = 10;

• Copy & Paste von Folien
 In Powerpoint werden die Anführungsstriche den Länderspezifischen Normen
angepasst. Derartiges in der Programmierung nicht!
04.12.2013

5
Grundbegriffe in .net
• C# Compiler
 übersetzt Quellcode in CIL – Code

• Common Intermediate Language (CIL, früher MSIL)
 Zwischensprache, indem der Quellcode übersetzt wird
 „Assembler“ von .net

• JIT / Jitter (Just-In-Time compilation)
 Übersetzt den CIL–Code (zur Laufzeit) in maschinennahem Code

• Common Language Runtime (CLR)
 Ausführungsumgebung von .net – Anwendungen

04.12.2013

6
Grundbegriffe in .net
• Garbage Collector (GC)
 Verwaltet den Programmspeicher
 Verhindert „Speicherlecks“

• Framework Class Library (FCL)
 Von .net zur Verfügung gestellte Funktionalitäten
 Auflistung der Klassen (MSDN-Link)

• Common Language Infrastructure (CLI)
 Common Type System (CTS)
 Common Language Specification (CLS)

04.12.2013

7
Microsoft Visual Studio
• Quelldatei (engl. Source File)
 Datei, in dem der C# Code gespeichert wird.
 Diese Datei(en) werden vom Compiler übersetzt

• Projekt (engl. Project)
 Ein Projekt fasst Quelldateien zusammen
 Aus einem Projekt erzeugt Visual Studio eine Assembly (*.exe, *.dll o.ä.)

• Projektmappe (engl. Solution)
 Eine Projektmappe fasst Projekten zusammen
 Beispiel: Microsoft Office als Solution; Powerpoint, Word, etc. sind Projekte

• Entwicklungsumgebung (engl. Integrated Development Enviroment)
 Integriert Entwicklungstools (Compiler, Editor, Debugger, usw.) zu einer Einheit um
den Entwicklungsprozess zu unterstützen

04.12.2013

8
Syntax und Semantik
• Syntax
 Grammatikalische Regeln einer Programmiersprache
 Wird vom Compiler forciert, d.h. Compilerfehler wenn Regel verletzt wird
 Analogie zu natürliche Sprachen:
•

Ein Satz muss immer Subjekt und Prädikat besitzen

• Semantik
 Absicht des Entwickler / Kunden, d.h. was soll das Programm machen.
 Kann nicht überprüft werden
•

Tools für spezielle Bereiche vorhanden.

 Analogie zu natürliche Sprachen:
•

04.12.2013

Die Aussage vom Satz

9
HelloWorld im Detail
04.12.2013

10
Henne – Ei – Problem

04.12.2013

11
Die Klassenmethode „Main“
static void Main(string[] args) {
Console.WriteLine(“Hello World!“);
}
• Einstiegspunkt des Programm.
 Jedes Programm besitzt nur einen Einstiegspunkt
 Im Normalfall definiert jedes Programm nur eine Main – Methode

• Beispiele der Veranstaltung definieren mehrere Main – Methoden!

• Details später im Kapitel „Methoden“
 Parameter an das Programm werden in args gespeichert.
 Die Methode gibt eine ganze Zahl zurück.
•
04.12.2013

Der Wert 0 indiziert eine fehlerfreie Ausführung
12
Quellcode Kommentare
• Lesbarkeit von Quellcode erhöhen
• Kommentare in einem Quellcode werden vom Compiler ignoriert

• Quellcodekommentierung ist eine fundamentale Fertigkeit
• Zeilenkommentar:
 // das ist ein Kommentar

 Inhalt von // bis Zeilenende wird als Kommentar behandelt

• Blockkommentar:
 /* das ist ein Kommentar */

 Inhalt von /* bis zum */ wird als Kommentar behandelt (auch bei Zeilenumbrüchen!)

• Dokumentationskommentare
 Später im Abschnitt „Methoden“
04.12.2013

13
Konsolenausgabe
Console.WriteLine(<ausdruck>);
Console.Write(<ausdruck>);
• Gültige Werte für <ausdruck> sind:
 Strings:
•

Unicode Support

 Gleichungen:
 Platzhalter:
•

Console.WriteLine(“Das ist ein Text“);
Console.WriteLine(1 + 1);

Console.WriteLine(“1 addiert mit 2 ergibt {0}“, 1 + 2);

Alternativmöglichkeit im Tutorium

• Achtung!
 String müssen in Anführungsstrichen geschrieben werden. Ansonsten wird er als
Anweisungen interpretiert, was zu einem Compilerfehler führt.
 Vergleiche:
•
•
04.12.2013

Console.WriteLine(“1 + 1“);
Console.WriteLine(1 + 1);
14
Escape Zeichen
• Wie können Sonderzeichen dargestellt werden?
 Leerzeichen wie Zeilenumbrüche, Tabulatoren
 Internationale Zeichen wie „Một suất thịt chó“ oder chinesische Schriftzeichen

• Escape Zeichen
  Backslash
 “ Anführungsstriche





n
t
v
u

Zeilenumbruch
Tabulator
Vertikale Tabulator
Unicode character (in Hexa FFFF). Bspl: “Pi (u03a0) and Sigma (u03a3)„

 x ASCII (in Hexa FF)

04.12.2013

15
Konsoleneingabe
Console.ReadLine();
• Blockiert die Programmausführung bis zur Benutzereingabe
 Programm rechnet im Hintergrund nichts nebenbei, sondern wartet auf die Eingabe
des Benutzers. Die Blockierung wird erst aufgehoben, wenn der Benutzer die „Enter“
Taste bestätigt.

• Anweisung lässt sich kombinieren:
 Console.WriteLine(Console.ReadLine());

• Was wird bei der folgende Anweisung ausgegeben? Warum?
 Console.WriteLine(“Console.ReadLine()“);

04.12.2013

16
Klasse „Program“
• C# ist eine Objektorientierte Programmiersprache
 Ein Programm ist ein Objekt, das mit anderen Objekten operiert.
 Jedes Objekt gehört zu einer Klasse.
 Analogie zur Welt:
•

Mensch als Klasse

•

Jeder Mensch ist ein Objekt der Klasse Mensch

•

Bei der Geburt wird die Funktion „Main“ aufgerufen. Diese wird bis zum Tot ausgeführt.

• Mehr zu Klassen, Objekte und Methoden später!

04.12.2013

17
Namensräume
• Motivation
 Um Namenskonflikte (2 unterschiedliche Bedeutungen mit dem selben Namen) zu
vermeiden, gibt es hierarchische Benennungsnormen.
 Erklärung am Beispiel: System.Console.WriteLine
•

System

Funktion ist Teil der FCL (Standardfunktionalität von .net)

•

Console

Alle Funktionen bzgl. der Konsole werden in einer Klasse gruppiert

•

WriteLine

eigentliche Funktion

• Abkürzung
 using System;
 danach kann statt System.Console.WriteLine kurz Console.WriteLine
geschrieben werden

• Tutorium:
 Programm schreiben, ohne using zu benutzen
04.12.2013

18
Variablen
04.12.2013

19
Variable: Grundlagen
• Deklaration
 Reservieren von Speichern für die Variable
 datentyp nameDerVariable;
 Beispiel: string name;

• Initialisierung





Zuweisung eines Anfangswertes für die Variable.
Eine Variable muss vorher deklariert werden bevor es initialisiert werden kann.
Allgemeine Syntax: nameDerVariable = wert;
Beispiel: name = „Alf“

• Verknüpfung möglich: Deklaration & Initialisierung
 Beispiel: string name = „alf“;

• Mehrere Variablen deklarieren
 Beispiel: int a, b, c;

• Initialisierung von einem, mehrere oder alle möglich
 Beispiel: int a, b=10, c;
04.12.2013

20
Datentypen
• Zeichenketten
• Boolescher Datentyp
 Einzige mögliche Werte sind true oder false

• Ganzzahlige Datentypen
 Unterscheidungsmerkmal:
•

Wertebereich und Speicherverbrauch

 Vertreter: byte, int, long, usw.

• Fließkommazahlen
 Unterscheidungsmerkmal:
•

Wertebereich, Speicherverbrauch, Genauigkeit nach dem Komma

 Vertreter: float, double, decimal, usw.

• Weiterführend:
 http://msdn.microsoft.com/en-us/library/ms228360%28v=VS.90%29.aspx
 http://msdn.microsoft.com/en-us/library/ya5y69ds.aspx

04.12.2013

21
Ganzzahlige Typen
Datentyp

Speicherbedarf in Byte

Wertebereich

sbyte

1

−27

27 − 1

byte

1

0

28

short

2

−215

215 − 1

ushort

2

0

216

int

4

−231

231 − 1

uint

4

0

232

long

8

−263

263 − 1

ulong

8

0

264

char

2

0

216

Weiterführend: http://msdn.microsoft.com/en-us/library/exx3b86w.aspx

04.12.2013

22
Fließkommazahlen
Datentyp

Speicher

Genauigkeit

Wertebereich

float

4

7 Stellen

±1.5e−45 bis ±3.4e38

double

8

15 – 16 Stellen

±5.0e−324 bis ±1.7e308

decimal

16

28 – 29 Stellen

(-7.9 x 1028 bis 7.9 x 1028) / (100 bis 28)

Weiterführend: http://msdn.microsoft.com/en-us/library/9ahet949.aspx

04.12.2013

23
Variablennamen
• Variablennamen
 müssen mit einem Unterstrich oder einem Buchstaben beginnen
 dürfen Buchstaben (nach Unicode), Ziffern und den Unterstrich enthalten
 dürfen keine Leerzeichen enthalten
 dürfen keine reservierten C# Schlüsselwörter sein (engl. Keywords)
•

Auflistung: http://msdn.microsoft.com/en-us/library/x53a06bb.aspx

 Beispiele: Tồi, ThịtChó,

• Erinnerung: C# unterscheidet zwischen Groß- und Kleinschreibung
 Engl. „case-sensitive“
 Beispiel: 3 völlig unterschiedliche Variable!
•
•

string meineVariable;

•

04.12.2013

int

meinevariable;

bool

MeineVariable;

24
Namenskonvention
• Camel Case (deutsch: Binnenmajuskel)
 Beispiele:
•

personAlter

•

personName,

 Mehrere Wörter zusammen schreiben
 Anfangsbuchstaben werden groß geschrieben
 Allererste Buchstabe wird klein geschrieben

 Eigentlich „lowerCamelCase“

• Pascal Case
 Beispiele:
•

PersonAlter

•

PersonName

 Wie lowerCamelCase, aber allererste Buchstabe wird klein geschrieben
 Eigentlich UpperCamelCase
04.12.2013

25
Namenskonvention
• Ungarische Notation
 „ Charles Simonyi“, Amerikaner mit ungarische Abstammung
 Variablenamen besitzen einen Präfix
•

Datentyp: b, n

•

Verwendungszweck: i (Index), f (Flag)

•

Und weiteres (http://de.wikipedia.org/wiki/Ungarische_Notation)

 Beispiel:
•

bTot, nAlter

• Microsoft Guideline
 Keine ungarische Notation
 Variablen und Parameter in lowerCamelCase
 Methoden, Klassen und Namensräume in UpperCamelCase
 http://msdn.microsoft.com/en-us/library/ms229002.aspx

04.12.2013

26
Variablen: Theorie
• Variablen
 Variablen werden im RAM gespeichert und sind somit „flüchtig“. D.h. Werte gehen
verloren, wenn PC ausgeschaltet wird.

• C# ist eine streng-typisierte Programmiersprache (engl. strongly typed)
 Der Typ einer Variable ist vorher festzulegen (Deklaration) und bleibt danach fest!
 Gegenteil: „schwach-typisiert“ (engl. weak typed)
•

alf = „Alf Mustermann“, alf = 12;

•

Vertreter: PHP, Visual Basic 6, usw.

 In Literaturen auch als „stark typisiert“
 Begriffe: statische Typisierung, dynamische Typisierung

04.12.2013

27
Typumwandlung
• Text in Zahl umwandeln
 In einem String ist die Zahl „8“ ist für den Computer 56
 „56“ für den Computer 2 Zahlen 53 54
•

Parsen nötig!

 <typ>.Parse()
 Beispiel: Int.Parse(„86“)

• Zahl in Text umwandeln
 Beispiel: 56.ToString() oder a.ToString()
 ToString() ist für jeden Datentyp definiert.
 ToString() wird häufig implizit aufgerufen.
•

Beispiel: „1 + 1 = “ + 1

• Umwandeln zwischen verschiedenen Zahlentypen
 Implizite Umwandlung:
•

Von kleineren Typ in größeren Typ (Wertebereich); verlustfreie

 Explizite Umwandlung:
•
•

04.12.2013

Verluste können auftreten
Explizite Angabe nötig: typ a = (typ) b;

28
Demo: Typumwandlung

04.12.2013

29
Wertetypen und Verweistypen
• Wertetyp
 „Primitiven Typen“
 Speichert den Wert
 Werden im Stack
gespeichert
 Beispiel: int, double, char

04.12.2013

• Verweistyp
 „Objekte“
 Speichert eine
Speicheradresse, wo der
eigentliche Wert ist
 „null“ als Wert möglich
 Werden im Heap
gespeichert
 Beispiel: string

30
Deklaration mit implizite Typangabe
• Deklaration von Variablen explizite Typangabe
 Beispiel: var zahl = 1;

• Keine dynamische Typisierung!
 Der Compiler bestimmt zur Kompilierungszeit den Typ

• Konstrukt für anonyme Typen (primär bei LinQ, später)
 Microsoft rät selbst in seiner Guideline davon ab, dieses Konstrukt außerhalb zu
nutzen!
 „Glaubenskrieg“

04.12.2013

31
Operatoren
04.12.2013

32
Assoziation und Priorität
• Definition: Ausdruck
 Ein Ausdruck ist eine Verknüpfung von Variablen, Konstanten und Funktionen durch
Operatoren, die einen Wert zurückliefert.
 Beispiel: a + b, c + 2, 1 + 4 * 3,

• Auswertung von Ausdrücken
 Priorität von Operatoren (engl. precedence)
•

Beispiel: Punktrechnung vor Strichrechnung

 Assoziativität von Operatoren (engl. Associativity)
•
•

Linksassoziativität:
Bei gleiche Priorität, (meisten) von links nach rechts auswerten
Rechtsassoziativität: Bei gleiche Priorität, (meisten) von rechts nach links auswerten

 Klammerungen haben stets Vorrang
 Meisten Operatoren sind linksassoziativ

• Auflistung alle Operatoren (nach Priorität geordnet)
 http://msdn.microsoft.com/en-us/library/ms173145%28v=VS.100%29.aspx
 http://msdn.microsoft.com/en-us/library/6a71f45d.aspx
04.12.2013

33
Arithmetische Operatoren
Operator

Funktion

Beispiel

+

Addition

1+2

3

-

Subtraktion

1–2

1

*

Multiplikation

1*2

2

/

Division

1/2

0

%

Restdivision („Modulo“)

1%2

1

Erläuterung:
• 1 / 2 = 0.5
• 0.5 ist keine ganze Zahl! Nachkommastellen werden einfach
weggeschnitten
• Lösungen
• 1.0 / 2 ?
• 1 / 2.0 ?
• (double) 1 / 2 ?
04.12.2013

34
Operatoren sind kontextabhängig
• Anwendung auf String: „Konkatenation“
 Beispiel: „1 + 1 = “

+ 1 liefert „1 + 1 = 1“

• Anwendung auf Zahlen: „Addition“
 Beispiel: 1 + 1 liefert 2

• Der + Operator hat 2 unterschiedliche Bedeutung, abhängig vom Datentyp

04.12.2013

35
Zusammengesetzte Zuweisungsoperatoren
Operator

Anwendung

Eigentliche Ausdruck

+=

a += 1

a=a+1

-=

a -= 1

a=a–1

*=

a *= 1

a=a*1

/=

a /= 1

a=a/1

%=

a %= 1

a=a%1

Inkrement- und Dekrementoperator
Operator

Anwendung

Eigentliche Ausdruck

++

a++ oder ++a

a=a+1

--

a– oder --a

a=a–1

04.12.2013

36
Demo: x++ Vs. ++x
04.12.2013

37
Boolesche Ausdrücke
(engl. Boolean Expression)
04.12.2013

38
Boolesche Ausdrücke
• Ausgangspunkt: Der Datentyp bool
 Beispiel: bool gK; // true oder false
 Ab wann ist ein Kunde ein „gute Kunde“?

• Kriterien für Beispiel:
 Kunde hat keine Schulden im Schufaverzeichnis
 gK = schufa == 0;
Vergleichsoperator
 Kunde öffnet Konto mit 5000€

Beschreibung

 gK = kapital > 5000;

==

Gleichheit

 Kunde hat festes Einkommen
 gK = hatEinkommen;

!=

Ungleichheit

<

Kleiner

<=

Kleiner gleich

>

Größer

>=

Größer gleich

• Aussagen verknüpfen?
 + Operator ist nicht definiert!
04.12.2013

39
Logische UND
• Syntax:
 Ausdr1 && Ausdr2
 Liefert true zurück, wenn Ausdr1 und Ausdr2 wahr ist. Ansonsten immer false.

• Analogie in natürliche Sprache:
•

„Wenn Ausdr1 und Ausdr2 stimmen“

•

„Wenn sowohl Ausdr1 als auch Ausdr2 stimmen“

• Beispiel:
 gK = schufa == 0 && kapital > 5000;

• Achtung! Wenn schufa != 0 gilt, wird sofort false zurück gegeben und

der Rest ignoriert! Dieser Umstand nennt sich short-circuiting.
 Lösung: Operator & statt && nehmen
04.12.2013

40
Logische ODER
• Syntax:
 Ausdr1 || Ausdr2
 Liefert nur false zurück, wenn Ausdr1 und Ausdr2 falsch sind. Ansonsten immer
true.

• Analogie in natürliche Sprache:
 Nicht mit dem oder aus der natürlichen Sprache verwechseln!
 „Wenn mindesten eines von beiden Aussagen gelten“

• Beispiel:
 gK = schufa == 0 || kapital > 5000;

• Achtung! Wenn schufa == 0 gilt, wird sofort true zurück gegeben und der

Rest ignoriert! Dieser Umstand nennt sich short-circuiting.
 Lösung: Operator | statt || nehmen
04.12.2013

41
Logische NICHT / Negationsoperator
• Syntax:
 !Ausdr1
 Liefert true zurück, wenn Ausdr1 falsch ist. Ansonsten false.

• Analogie in natürliche Sprache:
 „Das Gegenteil“

• Beispiel:
 sK = !(schufa == 0 && kapital > 5000);

• Frage: Ein Kunde ist ein schlechte Kunde, wenn er
 … wenn er einen Schufa Eintrag hat oder einen Startkapital von <5000€
 … wenn er einen Schufa Eintrag hat und einen Startkapital von <5000€

04.12.2013

42
Verzweigungen
(engl. Condition)
04.12.2013

43
Verzweigungen
• if – Anweisung
 Syntax: if (boolesche Ausdruck) { Anweisungen }
 Anweisungen werden nur ausgeführt, wenn der boolesche Ausdruck wahr
(true) ist.
 Der boolesche Ausdruck wird Bedingung genannt.
 Geschweifelten Klammern sind bei Einzelanweisung optional.

• if – else – Anweisung
 Syntax:
if (boolesche Ausdruck) { iAnweisungen }
else { eAnweisungen }

 iAnweisungen werden ausgeführt, wenn die Bedingung erfüllt ist. Ansonsten
werden die eAnweisungen ausgeführt.
 Geschweifelten Klammern sind bei Einzelanweisung optional.

04.12.2013

44
Verzweigungen
• Der bedingte Operator
 boolesche Ausdruck ? iAusdruck : eAusdruck
 Sowohl iAusdruck als auch eAusdruck müssen einen Wert zurückgeben und
dieser muss vom selben Typ sein.
 Beispiel:
•

Console.WriteLine(regen == true ? „Es wird nass.“ :

„nice!“);

• Verschachteln
 Sowohl iAnweisungen als auch eAnweisungen können selbst eine
Verzweigungsanweisung sein und fortführend.

• else – if – Ketten
 Spezielle Form der Verschachtelung um Rechenzeit zu sparen
 Der nächste if Block wird nur ausgeführt, wenn die vorherigen Bedingungen nicht
erfüllt sind.
04.12.2013

45
Demo: „e01_else_if.cs“

04.12.2013

46
Beispiel für switch-case
string wday = Console.ReadLine();
switch (wday) {
case "Monday":
Console.WriteLine("Neue Woche");
break;

case "Freitag":
Console.WriteLine("Wochenende!");
break;
default:
Console.WriteLine("Ungültige Wochentag");
break;
}
04.12.2013

47
switch - Anweisung
• Syntax:
switch(ausdruck) {
case wert1:

break;
case wert2:
break;

// …
default:
break;

}

• Alternative für spezielle else – if – Ketten
• default ist optional
04.12.2013

48
switch - Anweisung
• Jeder case muss mit einem break oder einem goto abgeschlossen werden.
 Außer leere Fälle!

• Für wert1, wert2, usw. müssen konstante Werte eingesetzt werden. Gültig

sind nur ganzzahlige Konstanten und Strings eingesetzt werden.
 Frage: Warum nicht Gleitkommazahlen?
 Antwort: Ungenauigkeit

• Mehr Informationen: http://msdn.microsoft.com/en-us/library/06tc147t.aspx

04.12.2013

49
Demo: „e02_switch.cs“
04.12.2013

50
Schleifen
(engl. Loop)
04.12.2013

51
for – Schleifen
• Syntax:
for(Initialisierung; Iterationsbedingung; Iterationsanweisung) {
Anweisungen

}

• Vor Schleife:
 Initialisierung ausführen

• Bei jedem Schleifendurchlauf wird:
 Davor: Iterationsbedingung prüfen
•
•

Bedingung erfüllt:
Bedingung nicht erfüllt:

Anweisungen ausführen
Code nach Schleife ausführen

 Danach: Iterationsanweisung ausführen

• Ein Schleifendurchgang wird Iteration genannt

04.12.2013

52
Demo: „e03_for.cs“
04.12.2013

53
for – Schleifen
• Alle Variablen, die im Initialisierung deklariert und initialisiert werden,

werden Schleifenvariablen genannt und sind nur innerhalb der Schleife gültig,
indem Sie definiert wurden.
• Sowohl Initialisierung, Iterationsbedingung als auch

Iterationsanweisung sind optional.
• Wenn die Iterationsbedingung nicht spezifiziert ist, wird die Schleife

endlos ausgeführt.
• Die geschweiften Klammern sind optional, wenn nur höchsten eine Anweisung

ausgeführt werden soll.

04.12.2013

54
Alternative Schleifenkonstrukte
• Gleichmächtig mit for – Schleife

• while – Schleife
 Syntax:
•

while(BoolescheAusdruck) { Anweisungen }

• do – while – Schleife
 Mindesten einer Iteration!
 Syntax:
•

do {Anweisungen} while(BoolescheAusdruck);

• Achtung: do-while braucht ein abschließendes Semikolon, aber while nicht.

04.12.2013

55
Demo: „e04_while.cs“
04.12.2013

56
Schleifensteuerung
• break
 Schleifenausführung komplett beenden
 In verschachtelte Schleifen, bezieht break immer nur auf die aktuelle Schleife

• continue
 Bricht die Durchführung der aktuellen Iteration ab.
 In verschachtelte Schleifen, bezieht continue immer nur auf die aktuelle Schleife

• Einsatzgebiet:
 Schleifensteuerungskonstrukte kommen insbesondere bei Endlosschleifen zum
Einsatz

04.12.2013

57
Demo: „e05_break.cs“
04.12.2013

58
Fehlerbehandlung
(engl. Exception Handling)
04.12.2013

59
try - catch
• Syntax:
try {
// …
}
catch(Exception) {
// …
}

• catch – Block wird nur ausgeführt, wenn Fehler auftreten. Man spricht von

„Exceptions geworfen“
• Mehrere catch Blöcke möglich
 Ähnlich wie bei switch – case

04.12.2013

60
Erweiterung: finally
• Anweisungen innerhalb von finally werden immer ausgeführt (ob mit oder ohne

Exception).
• Syntax:
try {
// Tue irgendwas
}
catch {
// Tue das, wenn ein Fehler auftritt
}
finally {
// Tue das auf jedenfall!
}

04.12.2013

61
Demo: „e06_try_c.cs“
04.12.2013

62
Was ist ein Array?
• Problemfrage:
 Große Anzahl an Variablen (Daten) verarbeiten
 Beispiel:
•

Pixel eines Bildes: mehrere Millionen Pixel

•

Native Lösung: Pixel pixel1, pixel2,…,pixel1000000;

• Lösung: Arrays!
 Definition: „Mehrere Variablen desselben Typs, die sich denselben Bezeichner teilen,
werden als Array bezeichnet.“
 Synonym: Datenfelder

04.12.2013

63
Array deklarieren
• Arrays müssen wie Variablen vor Ihrer Nutzung deklariert werden.

• Beispiele:
 int[]
zahlen;
 string[] namen;

• Syntax:
 type[] identifier;

• Vergleich zur Deklaration von Variablen
 int
zahl;
 string

04.12.2013

name;

64
Array initialisieren
• Im Gegensatz zu Variablen müssen, Arrays vor Ihrer Nutzung initialisiert werden.
• Beispiel:
 zahlen
 namen

= new int[10];
= new string[100];

• Syntax:
 identifier = new type[anzahl];
 Selbige Typ von der Deklaration

• Kombinierbar:
 type identifier = new type[anzahl];

• Die einzelnen Variablen des Arrays werden automatisch mit 0, null oder false

abhängig von ihrem Datentyp initialisiert. Die Variablen werden als Elemente
bezeichnet.
04.12.2013

65
Zugriff auf Elemente des Arrays
• Beispiel:
 Console.WriteLine(namen[0]);

• Syntax: Lesezugriff
 identifier[index];

• Syntax: Schreibzugriff
 identifier[index] = wert;

• Die Zählung beginnt mit 0.
• Überschreitet index die Größe vom Array, wirft .net eine Exception zurück
 Schutzmaßnahme gegen Angriffe

04.12.2013

66
Demo: „e01_init.cs“
Arrays deklarieren und initialisieren
Zugriff auf die Elemente vom Array

04.12.2013

67
Wertzuweisung bei der Initialisierung
• Beispiel:
string[] superhelden = new string[4] {
"Bruce Wayne", "Peter Parker", "Clark Kent", "Bruce Banner"
};

•

Syntax
type[] identifier = new type[] {
e1,e2,e3,…
};

•

Unabhängig von der Deklaration möglich
type[] identifier = new type[] {
e1,e2,e3,…
};

•

Dieses Sprachkonstrukt steht nur bei der Initialisierung des Array zur Verfügung!

04.12.2013

68
Initialisierung vom Array und Elementen
• Der Begriff Initialisierung ist bei Arrays zweideutig.
 Initialisierung des Arrays
 Initialisierung der Elemente vom Array.

• Die Deklaration ist nur für das Array selbst notwendig. Die Deklaration der

Elemente ist implizit.
• Technische Details:
 Was passiert bei der Deklaration des Array?
 Was passiert bei der Initialisierung des Array?
 Was passiert bei der Initialisierung der Elemente vom Array?

• Achtung! Die Größe eines Arrays ist fest
 Frage: Größe von Array verändern?
04.12.2013

69
foreach - Schleife
• Funktion:
 Alle Elemente eines Arrays einmal durchlaufen
 Nur Lesezugriff

• Syntax
type array = new type[numb];
foreach(type x in array) { expr }

• Beispiel

foreach (int x in zahlen) {
// Wertezuweisung ist nicht möglich
// x *= 2;
Console.Write(x + "t");
}
04.12.2013

70
Nützliche Funktionen
Funktion

Beschreibung

v.Length

Anzahl vom Array v
Häufig auch als Länge bezeichnet

Array.Sort(v)

Array v sortieren

Array.Sort(k,v)

Array v mit k verknüpfen und v anschließend mit k als
Kriterium sortieren

Array.Reserve(v)

Die Anordnung umkehren

Array.CopyTo(s,si,d,di,n)

Kopiert n Element von Array s (ab Index si) in Array d (ab
Index di)

• Klasse „System.Array“
• Weitere Funktionen verfügbar!
 http://msdn.microsoft.com/en-us/library/system.array.aspx
04.12.2013

71
Demo: „e02_utils.cs“
Anwendung von Standardfunktionalitäten

04.12.2013

72
Array duplizieren
• Achtung! Fehler: (siehe „e03_dupl.cs“)

int[] X = new int[] {
1,2,3,4,5,6,7,8,9
};
int[] Y = X;
• Semantische Fehler!
 Die beiden Verweise X und Y zeigen auf dasselbe Array im Heap.

• Lösung: (Pseudocode)
 Leeren Array erzeugen mit selbige Länge wie Quellarray
 Alle Elemente kopieren

• Oder über v.Clone() und Casten
04.12.2013

73
Demo: „e03_dupl.cs“
Anwendung von Standardfunktionalitäten

04.12.2013

74
Mehrdimensionale Arrays
• Syntax: 2D Array
 type[,] = new type[r,c];

• Beispiel: 2D Array
 byte [,] Bild = new byte[1920, 1080];

• Syntax: 3D Array
 type[,,] = new type[x,y,z];

• Dimension unbegrenzt!

• Vorsicht! Nutzung von n-dimensionale Arrays
 Speicherverbrauch: 𝑑1 ∗ 𝑑2 ∗ 𝑑3 ∗ ⋯ 𝑑 𝑛
 Beispiel: 1 Sekunde HD-Film
•
04.12.2013

1920 ∗ 1080 ∗ 25 = 51.840.000 (ca. 51 MB)
75
Klasse ArrayList
• Abstraktion von einem Array mit variable Länge
• Mischen von Typen innerhalb einer Liste erlaubt: String, int, etc.
• Neues Elemente aufnehmen
 alist.Add(e)
 alist.Insert(pos, e)

e der alist hinzufügen
e der alist an der Position pos hinzufügen

• Elemente aus der Liste löschen
 alist.Remove(e)
 alist.RemoveAt(i)

04.12.2013

Element e aus der Liste entfernen
Element an der Position i entfernen

76
Demo: „e04_alist.cs“
Erstellen einer ArrayList
Hinzufügen und Entfernen von Elementen

04.12.2013

77
Vielen Dank für die
Aufmerksamkeit
http://www.draphony.de
facebook.com/DraphonyGames
04.12.2013

78

Weitere ähnliche Inhalte

Ähnlich wie C Sharp Einfuehrung Teil 1

The Lotus Code Cookbook
The Lotus Code CookbookThe Lotus Code Cookbook
The Lotus Code CookbookUlrich Krause
 
WordPress sprachfähig machen - Lokalisierung Kür oder Krampf? - WordCamp Deut...
WordPress sprachfähig machen - Lokalisierung Kür oder Krampf? - WordCamp Deut...WordPress sprachfähig machen - Lokalisierung Kür oder Krampf? - WordCamp Deut...
WordPress sprachfähig machen - Lokalisierung Kür oder Krampf? - WordCamp Deut...David Decker
 
C / C++ Api for Beginners
C / C++ Api for BeginnersC / C++ Api for Beginners
C / C++ Api for BeginnersUlrich Krause
 
C API for Lotus Notes & Domino
C API for Lotus Notes & DominoC API for Lotus Notes & Domino
C API for Lotus Notes & DominoUlrich Krause
 
Javascript done right
Javascript done rightJavascript done right
Javascript done rightDirk Ginader
 
Was Sie schon immer über barrierefreie PDFs wissen wollten
Was Sie schon immer über barrierefreie PDFs wissen wolltenWas Sie schon immer über barrierefreie PDFs wissen wollten
Was Sie schon immer über barrierefreie PDFs wissen wolltenMarkus Erle
 
Devs@Home - Einführung in Go
Devs@Home - Einführung in GoDevs@Home - Einführung in Go
Devs@Home - Einführung in GoFrank Müller
 
IfN Studienarbeit Abschlusspres 18.9.2007
IfN Studienarbeit Abschlusspres 18.9.2007IfN Studienarbeit Abschlusspres 18.9.2007
IfN Studienarbeit Abschlusspres 18.9.2007derDoc
 
Python Bootcamp - Grundlagen
Python Bootcamp - GrundlagenPython Bootcamp - Grundlagen
Python Bootcamp - GrundlagenDatamics
 
Zentrale Dokumentengenerierung mit dem Open XML SDK
Zentrale Dokumentengenerierung mit dem Open XML SDKZentrale Dokumentengenerierung mit dem Open XML SDK
Zentrale Dokumentengenerierung mit dem Open XML SDKAndré Krämer
 
Internet und Webdesign (Historisches Dokument)
Internet und Webdesign (Historisches Dokument)Internet und Webdesign (Historisches Dokument)
Internet und Webdesign (Historisches Dokument)Eric Eggert
 
Top 10 Internet Trends 2001
Top 10 Internet Trends 2001Top 10 Internet Trends 2001
Top 10 Internet Trends 2001Jürg Stuker
 
Java und Go im Vergleich
Java und Go im VergleichJava und Go im Vergleich
Java und Go im VergleichQAware GmbH
 
Einsatz von Subversion bei der Entwicklung technisch-wissenschaftlicher Software
Einsatz von Subversion bei der Entwicklung technisch-wissenschaftlicher SoftwareEinsatz von Subversion bei der Entwicklung technisch-wissenschaftlicher Software
Einsatz von Subversion bei der Entwicklung technisch-wissenschaftlicher SoftwareAndreas Schreiber
 
FMK 2013 Xojo, Christian Schmitz
FMK 2013 Xojo, Christian SchmitzFMK 2013 Xojo, Christian Schmitz
FMK 2013 Xojo, Christian SchmitzVerein FM Konferenz
 
Die freie Programmiersprache Python
Die freie Programmiersprache Python Die freie Programmiersprache Python
Die freie Programmiersprache Python Andreas Schreiber
 

Ähnlich wie C Sharp Einfuehrung Teil 1 (20)

Ein Gopher im Netz
Ein Gopher im NetzEin Gopher im Netz
Ein Gopher im Netz
 
Haxe & NME
Haxe & NMEHaxe & NME
Haxe & NME
 
The Lotus Code Cookbook
The Lotus Code CookbookThe Lotus Code Cookbook
The Lotus Code Cookbook
 
WordPress sprachfähig machen - Lokalisierung Kür oder Krampf? - WordCamp Deut...
WordPress sprachfähig machen - Lokalisierung Kür oder Krampf? - WordCamp Deut...WordPress sprachfähig machen - Lokalisierung Kür oder Krampf? - WordCamp Deut...
WordPress sprachfähig machen - Lokalisierung Kür oder Krampf? - WordCamp Deut...
 
C / C++ Api for Beginners
C / C++ Api for BeginnersC / C++ Api for Beginners
C / C++ Api for Beginners
 
Php Schulung
Php SchulungPhp Schulung
Php Schulung
 
C API for Lotus Notes & Domino
C API for Lotus Notes & DominoC API for Lotus Notes & Domino
C API for Lotus Notes & Domino
 
Javascript done right
Javascript done rightJavascript done right
Javascript done right
 
Was Sie schon immer über barrierefreie PDFs wissen wollten
Was Sie schon immer über barrierefreie PDFs wissen wolltenWas Sie schon immer über barrierefreie PDFs wissen wollten
Was Sie schon immer über barrierefreie PDFs wissen wollten
 
Devs@Home - Einführung in Go
Devs@Home - Einführung in GoDevs@Home - Einführung in Go
Devs@Home - Einführung in Go
 
IfN Studienarbeit Abschlusspres 18.9.2007
IfN Studienarbeit Abschlusspres 18.9.2007IfN Studienarbeit Abschlusspres 18.9.2007
IfN Studienarbeit Abschlusspres 18.9.2007
 
Python Bootcamp - Grundlagen
Python Bootcamp - GrundlagenPython Bootcamp - Grundlagen
Python Bootcamp - Grundlagen
 
Zentrale Dokumentengenerierung mit dem Open XML SDK
Zentrale Dokumentengenerierung mit dem Open XML SDKZentrale Dokumentengenerierung mit dem Open XML SDK
Zentrale Dokumentengenerierung mit dem Open XML SDK
 
Windows Powershell
Windows PowershellWindows Powershell
Windows Powershell
 
Internet und Webdesign (Historisches Dokument)
Internet und Webdesign (Historisches Dokument)Internet und Webdesign (Historisches Dokument)
Internet und Webdesign (Historisches Dokument)
 
Top 10 Internet Trends 2001
Top 10 Internet Trends 2001Top 10 Internet Trends 2001
Top 10 Internet Trends 2001
 
Java und Go im Vergleich
Java und Go im VergleichJava und Go im Vergleich
Java und Go im Vergleich
 
Einsatz von Subversion bei der Entwicklung technisch-wissenschaftlicher Software
Einsatz von Subversion bei der Entwicklung technisch-wissenschaftlicher SoftwareEinsatz von Subversion bei der Entwicklung technisch-wissenschaftlicher Software
Einsatz von Subversion bei der Entwicklung technisch-wissenschaftlicher Software
 
FMK 2013 Xojo, Christian Schmitz
FMK 2013 Xojo, Christian SchmitzFMK 2013 Xojo, Christian Schmitz
FMK 2013 Xojo, Christian Schmitz
 
Die freie Programmiersprache Python
Die freie Programmiersprache Python Die freie Programmiersprache Python
Die freie Programmiersprache Python
 

Kürzlich hochgeladen

Konjunktiv II - Theorie undd Beispiele - DaF mit Power
Konjunktiv II - Theorie undd Beispiele - DaF mit PowerKonjunktiv II - Theorie undd Beispiele - DaF mit Power
Konjunktiv II - Theorie undd Beispiele - DaF mit PowerMaria Vaz König
 
Kurzbeschreibung Schreibtools für die Toolbox.pdf
Kurzbeschreibung Schreibtools für die Toolbox.pdfKurzbeschreibung Schreibtools für die Toolbox.pdf
Kurzbeschreibung Schreibtools für die Toolbox.pdfHenning Urs
 
Ein Telefongespräch. Ein Telefongespräch. Ein Telefongespräch
Ein Telefongespräch. Ein Telefongespräch. Ein TelefongesprächEin Telefongespräch. Ein Telefongespräch. Ein Telefongespräch
Ein Telefongespräch. Ein Telefongespräch. Ein TelefongesprächOlenaKarlsTkachenko
 
Presentation Endstation Dingden, Razzia von Rotterdam
Presentation Endstation Dingden, Razzia von RotterdamPresentation Endstation Dingden, Razzia von Rotterdam
Presentation Endstation Dingden, Razzia von RotterdamEus van Hove
 
Stadt Popasna.Stadt PopasnaStadt Popasna
Stadt Popasna.Stadt PopasnaStadt PopasnaStadt Popasna.Stadt PopasnaStadt Popasna
Stadt Popasna.Stadt PopasnaStadt PopasnaOlenaKarlsTkachenko
 

Kürzlich hochgeladen (6)

Konjunktiv II - Theorie undd Beispiele - DaF mit Power
Konjunktiv II - Theorie undd Beispiele - DaF mit PowerKonjunktiv II - Theorie undd Beispiele - DaF mit Power
Konjunktiv II - Theorie undd Beispiele - DaF mit Power
 
Kurzbeschreibung Schreibtools für die Toolbox.pdf
Kurzbeschreibung Schreibtools für die Toolbox.pdfKurzbeschreibung Schreibtools für die Toolbox.pdf
Kurzbeschreibung Schreibtools für die Toolbox.pdf
 
Ein Telefongespräch. Ein Telefongespräch. Ein Telefongespräch
Ein Telefongespräch. Ein Telefongespräch. Ein TelefongesprächEin Telefongespräch. Ein Telefongespräch. Ein Telefongespräch
Ein Telefongespräch. Ein Telefongespräch. Ein Telefongespräch
 
Díptic PFI pfi pfi pfi pfi pfi pfi pf.pdf
Díptic PFI pfi pfi pfi pfi pfi pfi pf.pdfDíptic PFI pfi pfi pfi pfi pfi pfi pf.pdf
Díptic PFI pfi pfi pfi pfi pfi pfi pf.pdf
 
Presentation Endstation Dingden, Razzia von Rotterdam
Presentation Endstation Dingden, Razzia von RotterdamPresentation Endstation Dingden, Razzia von Rotterdam
Presentation Endstation Dingden, Razzia von Rotterdam
 
Stadt Popasna.Stadt PopasnaStadt Popasna
Stadt Popasna.Stadt PopasnaStadt PopasnaStadt Popasna.Stadt PopasnaStadt Popasna
Stadt Popasna.Stadt PopasnaStadt Popasna
 

C Sharp Einfuehrung Teil 1

  • 1. C# Einführung - Grundlagen der Programmierung Do, Hoang Viet (do@mi.fu-berlin.de) Draphony Games (http://www.draphony.de)
  • 3. Grundbegriffe in der Entwicklung • Quellcode  Entwickler schreiben das Programm in einer Programmiersprache. Dieser Text wird Quellcode genannt.  Im Gegensatz zur natürlichen Sprache erfüllen Programmiersprache diverse Anforderungen, die eine weitere maschinelle Verarbeitung erst ermöglich, u.a. Eindeutigkeit • Gegenbeispiel aus Wikipedia: Jeder Mann liebt eine Frau. (Wikipedia Artikel) • Compiler  Der Quellcode muss mit Hilfe eines Programms in einer maschinenlesbare Sprache übersetzt werden. 04.12.2013 3
  • 5. Häufig gemachte Fehler • C# unterscheidet zwischen Groß- und Kleinschreibung (engl. case-sensible)  Console.WriteLine ist nicht das selbe wie console.writeline • Absätze wie Leerzeichen, Tabulatoren sind optional  In den meisten Fällen, lässt sich der Quellcode auch in einer einzigen Zeile schreiben. (Daran haben später alle Spaß!) • Eine Anweisung wird mit einem Semikolon beendet  Console.WriteLine(“Hello World“);  int a = 10; • Copy & Paste von Folien  In Powerpoint werden die Anführungsstriche den Länderspezifischen Normen angepasst. Derartiges in der Programmierung nicht! 04.12.2013 5
  • 6. Grundbegriffe in .net • C# Compiler  übersetzt Quellcode in CIL – Code • Common Intermediate Language (CIL, früher MSIL)  Zwischensprache, indem der Quellcode übersetzt wird  „Assembler“ von .net • JIT / Jitter (Just-In-Time compilation)  Übersetzt den CIL–Code (zur Laufzeit) in maschinennahem Code • Common Language Runtime (CLR)  Ausführungsumgebung von .net – Anwendungen 04.12.2013 6
  • 7. Grundbegriffe in .net • Garbage Collector (GC)  Verwaltet den Programmspeicher  Verhindert „Speicherlecks“ • Framework Class Library (FCL)  Von .net zur Verfügung gestellte Funktionalitäten  Auflistung der Klassen (MSDN-Link) • Common Language Infrastructure (CLI)  Common Type System (CTS)  Common Language Specification (CLS) 04.12.2013 7
  • 8. Microsoft Visual Studio • Quelldatei (engl. Source File)  Datei, in dem der C# Code gespeichert wird.  Diese Datei(en) werden vom Compiler übersetzt • Projekt (engl. Project)  Ein Projekt fasst Quelldateien zusammen  Aus einem Projekt erzeugt Visual Studio eine Assembly (*.exe, *.dll o.ä.) • Projektmappe (engl. Solution)  Eine Projektmappe fasst Projekten zusammen  Beispiel: Microsoft Office als Solution; Powerpoint, Word, etc. sind Projekte • Entwicklungsumgebung (engl. Integrated Development Enviroment)  Integriert Entwicklungstools (Compiler, Editor, Debugger, usw.) zu einer Einheit um den Entwicklungsprozess zu unterstützen 04.12.2013 8
  • 9. Syntax und Semantik • Syntax  Grammatikalische Regeln einer Programmiersprache  Wird vom Compiler forciert, d.h. Compilerfehler wenn Regel verletzt wird  Analogie zu natürliche Sprachen: • Ein Satz muss immer Subjekt und Prädikat besitzen • Semantik  Absicht des Entwickler / Kunden, d.h. was soll das Programm machen.  Kann nicht überprüft werden • Tools für spezielle Bereiche vorhanden.  Analogie zu natürliche Sprachen: • 04.12.2013 Die Aussage vom Satz 9
  • 11. Henne – Ei – Problem 04.12.2013 11
  • 12. Die Klassenmethode „Main“ static void Main(string[] args) { Console.WriteLine(“Hello World!“); } • Einstiegspunkt des Programm.  Jedes Programm besitzt nur einen Einstiegspunkt  Im Normalfall definiert jedes Programm nur eine Main – Methode • Beispiele der Veranstaltung definieren mehrere Main – Methoden! • Details später im Kapitel „Methoden“  Parameter an das Programm werden in args gespeichert.  Die Methode gibt eine ganze Zahl zurück. • 04.12.2013 Der Wert 0 indiziert eine fehlerfreie Ausführung 12
  • 13. Quellcode Kommentare • Lesbarkeit von Quellcode erhöhen • Kommentare in einem Quellcode werden vom Compiler ignoriert • Quellcodekommentierung ist eine fundamentale Fertigkeit • Zeilenkommentar:  // das ist ein Kommentar  Inhalt von // bis Zeilenende wird als Kommentar behandelt • Blockkommentar:  /* das ist ein Kommentar */  Inhalt von /* bis zum */ wird als Kommentar behandelt (auch bei Zeilenumbrüchen!) • Dokumentationskommentare  Später im Abschnitt „Methoden“ 04.12.2013 13
  • 14. Konsolenausgabe Console.WriteLine(<ausdruck>); Console.Write(<ausdruck>); • Gültige Werte für <ausdruck> sind:  Strings: • Unicode Support  Gleichungen:  Platzhalter: • Console.WriteLine(“Das ist ein Text“); Console.WriteLine(1 + 1); Console.WriteLine(“1 addiert mit 2 ergibt {0}“, 1 + 2); Alternativmöglichkeit im Tutorium • Achtung!  String müssen in Anführungsstrichen geschrieben werden. Ansonsten wird er als Anweisungen interpretiert, was zu einem Compilerfehler führt.  Vergleiche: • • 04.12.2013 Console.WriteLine(“1 + 1“); Console.WriteLine(1 + 1); 14
  • 15. Escape Zeichen • Wie können Sonderzeichen dargestellt werden?  Leerzeichen wie Zeilenumbrüche, Tabulatoren  Internationale Zeichen wie „Một suất thịt chó“ oder chinesische Schriftzeichen • Escape Zeichen  Backslash  “ Anführungsstriche     n t v u Zeilenumbruch Tabulator Vertikale Tabulator Unicode character (in Hexa FFFF). Bspl: “Pi (u03a0) and Sigma (u03a3)„  x ASCII (in Hexa FF) 04.12.2013 15
  • 16. Konsoleneingabe Console.ReadLine(); • Blockiert die Programmausführung bis zur Benutzereingabe  Programm rechnet im Hintergrund nichts nebenbei, sondern wartet auf die Eingabe des Benutzers. Die Blockierung wird erst aufgehoben, wenn der Benutzer die „Enter“ Taste bestätigt. • Anweisung lässt sich kombinieren:  Console.WriteLine(Console.ReadLine()); • Was wird bei der folgende Anweisung ausgegeben? Warum?  Console.WriteLine(“Console.ReadLine()“); 04.12.2013 16
  • 17. Klasse „Program“ • C# ist eine Objektorientierte Programmiersprache  Ein Programm ist ein Objekt, das mit anderen Objekten operiert.  Jedes Objekt gehört zu einer Klasse.  Analogie zur Welt: • Mensch als Klasse • Jeder Mensch ist ein Objekt der Klasse Mensch • Bei der Geburt wird die Funktion „Main“ aufgerufen. Diese wird bis zum Tot ausgeführt. • Mehr zu Klassen, Objekte und Methoden später! 04.12.2013 17
  • 18. Namensräume • Motivation  Um Namenskonflikte (2 unterschiedliche Bedeutungen mit dem selben Namen) zu vermeiden, gibt es hierarchische Benennungsnormen.  Erklärung am Beispiel: System.Console.WriteLine • System Funktion ist Teil der FCL (Standardfunktionalität von .net) • Console Alle Funktionen bzgl. der Konsole werden in einer Klasse gruppiert • WriteLine eigentliche Funktion • Abkürzung  using System;  danach kann statt System.Console.WriteLine kurz Console.WriteLine geschrieben werden • Tutorium:  Programm schreiben, ohne using zu benutzen 04.12.2013 18
  • 20. Variable: Grundlagen • Deklaration  Reservieren von Speichern für die Variable  datentyp nameDerVariable;  Beispiel: string name; • Initialisierung     Zuweisung eines Anfangswertes für die Variable. Eine Variable muss vorher deklariert werden bevor es initialisiert werden kann. Allgemeine Syntax: nameDerVariable = wert; Beispiel: name = „Alf“ • Verknüpfung möglich: Deklaration & Initialisierung  Beispiel: string name = „alf“; • Mehrere Variablen deklarieren  Beispiel: int a, b, c; • Initialisierung von einem, mehrere oder alle möglich  Beispiel: int a, b=10, c; 04.12.2013 20
  • 21. Datentypen • Zeichenketten • Boolescher Datentyp  Einzige mögliche Werte sind true oder false • Ganzzahlige Datentypen  Unterscheidungsmerkmal: • Wertebereich und Speicherverbrauch  Vertreter: byte, int, long, usw. • Fließkommazahlen  Unterscheidungsmerkmal: • Wertebereich, Speicherverbrauch, Genauigkeit nach dem Komma  Vertreter: float, double, decimal, usw. • Weiterführend:  http://msdn.microsoft.com/en-us/library/ms228360%28v=VS.90%29.aspx  http://msdn.microsoft.com/en-us/library/ya5y69ds.aspx 04.12.2013 21
  • 22. Ganzzahlige Typen Datentyp Speicherbedarf in Byte Wertebereich sbyte 1 −27 27 − 1 byte 1 0 28 short 2 −215 215 − 1 ushort 2 0 216 int 4 −231 231 − 1 uint 4 0 232 long 8 −263 263 − 1 ulong 8 0 264 char 2 0 216 Weiterführend: http://msdn.microsoft.com/en-us/library/exx3b86w.aspx 04.12.2013 22
  • 23. Fließkommazahlen Datentyp Speicher Genauigkeit Wertebereich float 4 7 Stellen ±1.5e−45 bis ±3.4e38 double 8 15 – 16 Stellen ±5.0e−324 bis ±1.7e308 decimal 16 28 – 29 Stellen (-7.9 x 1028 bis 7.9 x 1028) / (100 bis 28) Weiterführend: http://msdn.microsoft.com/en-us/library/9ahet949.aspx 04.12.2013 23
  • 24. Variablennamen • Variablennamen  müssen mit einem Unterstrich oder einem Buchstaben beginnen  dürfen Buchstaben (nach Unicode), Ziffern und den Unterstrich enthalten  dürfen keine Leerzeichen enthalten  dürfen keine reservierten C# Schlüsselwörter sein (engl. Keywords) • Auflistung: http://msdn.microsoft.com/en-us/library/x53a06bb.aspx  Beispiele: Tồi, ThịtChó, • Erinnerung: C# unterscheidet zwischen Groß- und Kleinschreibung  Engl. „case-sensitive“  Beispiel: 3 völlig unterschiedliche Variable! • • string meineVariable; • 04.12.2013 int meinevariable; bool MeineVariable; 24
  • 25. Namenskonvention • Camel Case (deutsch: Binnenmajuskel)  Beispiele: • personAlter • personName,  Mehrere Wörter zusammen schreiben  Anfangsbuchstaben werden groß geschrieben  Allererste Buchstabe wird klein geschrieben  Eigentlich „lowerCamelCase“ • Pascal Case  Beispiele: • PersonAlter • PersonName  Wie lowerCamelCase, aber allererste Buchstabe wird klein geschrieben  Eigentlich UpperCamelCase 04.12.2013 25
  • 26. Namenskonvention • Ungarische Notation  „ Charles Simonyi“, Amerikaner mit ungarische Abstammung  Variablenamen besitzen einen Präfix • Datentyp: b, n • Verwendungszweck: i (Index), f (Flag) • Und weiteres (http://de.wikipedia.org/wiki/Ungarische_Notation)  Beispiel: • bTot, nAlter • Microsoft Guideline  Keine ungarische Notation  Variablen und Parameter in lowerCamelCase  Methoden, Klassen und Namensräume in UpperCamelCase  http://msdn.microsoft.com/en-us/library/ms229002.aspx 04.12.2013 26
  • 27. Variablen: Theorie • Variablen  Variablen werden im RAM gespeichert und sind somit „flüchtig“. D.h. Werte gehen verloren, wenn PC ausgeschaltet wird. • C# ist eine streng-typisierte Programmiersprache (engl. strongly typed)  Der Typ einer Variable ist vorher festzulegen (Deklaration) und bleibt danach fest!  Gegenteil: „schwach-typisiert“ (engl. weak typed) • alf = „Alf Mustermann“, alf = 12; • Vertreter: PHP, Visual Basic 6, usw.  In Literaturen auch als „stark typisiert“  Begriffe: statische Typisierung, dynamische Typisierung 04.12.2013 27
  • 28. Typumwandlung • Text in Zahl umwandeln  In einem String ist die Zahl „8“ ist für den Computer 56  „56“ für den Computer 2 Zahlen 53 54 • Parsen nötig!  <typ>.Parse()  Beispiel: Int.Parse(„86“) • Zahl in Text umwandeln  Beispiel: 56.ToString() oder a.ToString()  ToString() ist für jeden Datentyp definiert.  ToString() wird häufig implizit aufgerufen. • Beispiel: „1 + 1 = “ + 1 • Umwandeln zwischen verschiedenen Zahlentypen  Implizite Umwandlung: • Von kleineren Typ in größeren Typ (Wertebereich); verlustfreie  Explizite Umwandlung: • • 04.12.2013 Verluste können auftreten Explizite Angabe nötig: typ a = (typ) b; 28
  • 30. Wertetypen und Verweistypen • Wertetyp  „Primitiven Typen“  Speichert den Wert  Werden im Stack gespeichert  Beispiel: int, double, char 04.12.2013 • Verweistyp  „Objekte“  Speichert eine Speicheradresse, wo der eigentliche Wert ist  „null“ als Wert möglich  Werden im Heap gespeichert  Beispiel: string 30
  • 31. Deklaration mit implizite Typangabe • Deklaration von Variablen explizite Typangabe  Beispiel: var zahl = 1; • Keine dynamische Typisierung!  Der Compiler bestimmt zur Kompilierungszeit den Typ • Konstrukt für anonyme Typen (primär bei LinQ, später)  Microsoft rät selbst in seiner Guideline davon ab, dieses Konstrukt außerhalb zu nutzen!  „Glaubenskrieg“ 04.12.2013 31
  • 33. Assoziation und Priorität • Definition: Ausdruck  Ein Ausdruck ist eine Verknüpfung von Variablen, Konstanten und Funktionen durch Operatoren, die einen Wert zurückliefert.  Beispiel: a + b, c + 2, 1 + 4 * 3, • Auswertung von Ausdrücken  Priorität von Operatoren (engl. precedence) • Beispiel: Punktrechnung vor Strichrechnung  Assoziativität von Operatoren (engl. Associativity) • • Linksassoziativität: Bei gleiche Priorität, (meisten) von links nach rechts auswerten Rechtsassoziativität: Bei gleiche Priorität, (meisten) von rechts nach links auswerten  Klammerungen haben stets Vorrang  Meisten Operatoren sind linksassoziativ • Auflistung alle Operatoren (nach Priorität geordnet)  http://msdn.microsoft.com/en-us/library/ms173145%28v=VS.100%29.aspx  http://msdn.microsoft.com/en-us/library/6a71f45d.aspx 04.12.2013 33
  • 34. Arithmetische Operatoren Operator Funktion Beispiel + Addition 1+2 3 - Subtraktion 1–2 1 * Multiplikation 1*2 2 / Division 1/2 0 % Restdivision („Modulo“) 1%2 1 Erläuterung: • 1 / 2 = 0.5 • 0.5 ist keine ganze Zahl! Nachkommastellen werden einfach weggeschnitten • Lösungen • 1.0 / 2 ? • 1 / 2.0 ? • (double) 1 / 2 ? 04.12.2013 34
  • 35. Operatoren sind kontextabhängig • Anwendung auf String: „Konkatenation“  Beispiel: „1 + 1 = “ + 1 liefert „1 + 1 = 1“ • Anwendung auf Zahlen: „Addition“  Beispiel: 1 + 1 liefert 2 • Der + Operator hat 2 unterschiedliche Bedeutung, abhängig vom Datentyp 04.12.2013 35
  • 36. Zusammengesetzte Zuweisungsoperatoren Operator Anwendung Eigentliche Ausdruck += a += 1 a=a+1 -= a -= 1 a=a–1 *= a *= 1 a=a*1 /= a /= 1 a=a/1 %= a %= 1 a=a%1 Inkrement- und Dekrementoperator Operator Anwendung Eigentliche Ausdruck ++ a++ oder ++a a=a+1 -- a– oder --a a=a–1 04.12.2013 36
  • 37. Demo: x++ Vs. ++x 04.12.2013 37
  • 38. Boolesche Ausdrücke (engl. Boolean Expression) 04.12.2013 38
  • 39. Boolesche Ausdrücke • Ausgangspunkt: Der Datentyp bool  Beispiel: bool gK; // true oder false  Ab wann ist ein Kunde ein „gute Kunde“? • Kriterien für Beispiel:  Kunde hat keine Schulden im Schufaverzeichnis  gK = schufa == 0; Vergleichsoperator  Kunde öffnet Konto mit 5000€ Beschreibung  gK = kapital > 5000; == Gleichheit  Kunde hat festes Einkommen  gK = hatEinkommen; != Ungleichheit < Kleiner <= Kleiner gleich > Größer >= Größer gleich • Aussagen verknüpfen?  + Operator ist nicht definiert! 04.12.2013 39
  • 40. Logische UND • Syntax:  Ausdr1 && Ausdr2  Liefert true zurück, wenn Ausdr1 und Ausdr2 wahr ist. Ansonsten immer false. • Analogie in natürliche Sprache: • „Wenn Ausdr1 und Ausdr2 stimmen“ • „Wenn sowohl Ausdr1 als auch Ausdr2 stimmen“ • Beispiel:  gK = schufa == 0 && kapital > 5000; • Achtung! Wenn schufa != 0 gilt, wird sofort false zurück gegeben und der Rest ignoriert! Dieser Umstand nennt sich short-circuiting.  Lösung: Operator & statt && nehmen 04.12.2013 40
  • 41. Logische ODER • Syntax:  Ausdr1 || Ausdr2  Liefert nur false zurück, wenn Ausdr1 und Ausdr2 falsch sind. Ansonsten immer true. • Analogie in natürliche Sprache:  Nicht mit dem oder aus der natürlichen Sprache verwechseln!  „Wenn mindesten eines von beiden Aussagen gelten“ • Beispiel:  gK = schufa == 0 || kapital > 5000; • Achtung! Wenn schufa == 0 gilt, wird sofort true zurück gegeben und der Rest ignoriert! Dieser Umstand nennt sich short-circuiting.  Lösung: Operator | statt || nehmen 04.12.2013 41
  • 42. Logische NICHT / Negationsoperator • Syntax:  !Ausdr1  Liefert true zurück, wenn Ausdr1 falsch ist. Ansonsten false. • Analogie in natürliche Sprache:  „Das Gegenteil“ • Beispiel:  sK = !(schufa == 0 && kapital > 5000); • Frage: Ein Kunde ist ein schlechte Kunde, wenn er  … wenn er einen Schufa Eintrag hat oder einen Startkapital von <5000€  … wenn er einen Schufa Eintrag hat und einen Startkapital von <5000€ 04.12.2013 42
  • 44. Verzweigungen • if – Anweisung  Syntax: if (boolesche Ausdruck) { Anweisungen }  Anweisungen werden nur ausgeführt, wenn der boolesche Ausdruck wahr (true) ist.  Der boolesche Ausdruck wird Bedingung genannt.  Geschweifelten Klammern sind bei Einzelanweisung optional. • if – else – Anweisung  Syntax: if (boolesche Ausdruck) { iAnweisungen } else { eAnweisungen }  iAnweisungen werden ausgeführt, wenn die Bedingung erfüllt ist. Ansonsten werden die eAnweisungen ausgeführt.  Geschweifelten Klammern sind bei Einzelanweisung optional. 04.12.2013 44
  • 45. Verzweigungen • Der bedingte Operator  boolesche Ausdruck ? iAusdruck : eAusdruck  Sowohl iAusdruck als auch eAusdruck müssen einen Wert zurückgeben und dieser muss vom selben Typ sein.  Beispiel: • Console.WriteLine(regen == true ? „Es wird nass.“ : „nice!“); • Verschachteln  Sowohl iAnweisungen als auch eAnweisungen können selbst eine Verzweigungsanweisung sein und fortführend. • else – if – Ketten  Spezielle Form der Verschachtelung um Rechenzeit zu sparen  Der nächste if Block wird nur ausgeführt, wenn die vorherigen Bedingungen nicht erfüllt sind. 04.12.2013 45
  • 47. Beispiel für switch-case string wday = Console.ReadLine(); switch (wday) { case "Monday": Console.WriteLine("Neue Woche"); break; case "Freitag": Console.WriteLine("Wochenende!"); break; default: Console.WriteLine("Ungültige Wochentag"); break; } 04.12.2013 47
  • 48. switch - Anweisung • Syntax: switch(ausdruck) { case wert1: break; case wert2: break; // … default: break; } • Alternative für spezielle else – if – Ketten • default ist optional 04.12.2013 48
  • 49. switch - Anweisung • Jeder case muss mit einem break oder einem goto abgeschlossen werden.  Außer leere Fälle! • Für wert1, wert2, usw. müssen konstante Werte eingesetzt werden. Gültig sind nur ganzzahlige Konstanten und Strings eingesetzt werden.  Frage: Warum nicht Gleitkommazahlen?  Antwort: Ungenauigkeit • Mehr Informationen: http://msdn.microsoft.com/en-us/library/06tc147t.aspx 04.12.2013 49
  • 52. for – Schleifen • Syntax: for(Initialisierung; Iterationsbedingung; Iterationsanweisung) { Anweisungen } • Vor Schleife:  Initialisierung ausführen • Bei jedem Schleifendurchlauf wird:  Davor: Iterationsbedingung prüfen • • Bedingung erfüllt: Bedingung nicht erfüllt: Anweisungen ausführen Code nach Schleife ausführen  Danach: Iterationsanweisung ausführen • Ein Schleifendurchgang wird Iteration genannt 04.12.2013 52
  • 54. for – Schleifen • Alle Variablen, die im Initialisierung deklariert und initialisiert werden, werden Schleifenvariablen genannt und sind nur innerhalb der Schleife gültig, indem Sie definiert wurden. • Sowohl Initialisierung, Iterationsbedingung als auch Iterationsanweisung sind optional. • Wenn die Iterationsbedingung nicht spezifiziert ist, wird die Schleife endlos ausgeführt. • Die geschweiften Klammern sind optional, wenn nur höchsten eine Anweisung ausgeführt werden soll. 04.12.2013 54
  • 55. Alternative Schleifenkonstrukte • Gleichmächtig mit for – Schleife • while – Schleife  Syntax: • while(BoolescheAusdruck) { Anweisungen } • do – while – Schleife  Mindesten einer Iteration!  Syntax: • do {Anweisungen} while(BoolescheAusdruck); • Achtung: do-while braucht ein abschließendes Semikolon, aber while nicht. 04.12.2013 55
  • 57. Schleifensteuerung • break  Schleifenausführung komplett beenden  In verschachtelte Schleifen, bezieht break immer nur auf die aktuelle Schleife • continue  Bricht die Durchführung der aktuellen Iteration ab.  In verschachtelte Schleifen, bezieht continue immer nur auf die aktuelle Schleife • Einsatzgebiet:  Schleifensteuerungskonstrukte kommen insbesondere bei Endlosschleifen zum Einsatz 04.12.2013 57
  • 60. try - catch • Syntax: try { // … } catch(Exception) { // … } • catch – Block wird nur ausgeführt, wenn Fehler auftreten. Man spricht von „Exceptions geworfen“ • Mehrere catch Blöcke möglich  Ähnlich wie bei switch – case 04.12.2013 60
  • 61. Erweiterung: finally • Anweisungen innerhalb von finally werden immer ausgeführt (ob mit oder ohne Exception). • Syntax: try { // Tue irgendwas } catch { // Tue das, wenn ein Fehler auftritt } finally { // Tue das auf jedenfall! } 04.12.2013 61
  • 63. Was ist ein Array? • Problemfrage:  Große Anzahl an Variablen (Daten) verarbeiten  Beispiel: • Pixel eines Bildes: mehrere Millionen Pixel • Native Lösung: Pixel pixel1, pixel2,…,pixel1000000; • Lösung: Arrays!  Definition: „Mehrere Variablen desselben Typs, die sich denselben Bezeichner teilen, werden als Array bezeichnet.“  Synonym: Datenfelder 04.12.2013 63
  • 64. Array deklarieren • Arrays müssen wie Variablen vor Ihrer Nutzung deklariert werden. • Beispiele:  int[] zahlen;  string[] namen; • Syntax:  type[] identifier; • Vergleich zur Deklaration von Variablen  int zahl;  string 04.12.2013 name; 64
  • 65. Array initialisieren • Im Gegensatz zu Variablen müssen, Arrays vor Ihrer Nutzung initialisiert werden. • Beispiel:  zahlen  namen = new int[10]; = new string[100]; • Syntax:  identifier = new type[anzahl];  Selbige Typ von der Deklaration • Kombinierbar:  type identifier = new type[anzahl]; • Die einzelnen Variablen des Arrays werden automatisch mit 0, null oder false abhängig von ihrem Datentyp initialisiert. Die Variablen werden als Elemente bezeichnet. 04.12.2013 65
  • 66. Zugriff auf Elemente des Arrays • Beispiel:  Console.WriteLine(namen[0]); • Syntax: Lesezugriff  identifier[index]; • Syntax: Schreibzugriff  identifier[index] = wert; • Die Zählung beginnt mit 0. • Überschreitet index die Größe vom Array, wirft .net eine Exception zurück  Schutzmaßnahme gegen Angriffe 04.12.2013 66
  • 67. Demo: „e01_init.cs“ Arrays deklarieren und initialisieren Zugriff auf die Elemente vom Array 04.12.2013 67
  • 68. Wertzuweisung bei der Initialisierung • Beispiel: string[] superhelden = new string[4] { "Bruce Wayne", "Peter Parker", "Clark Kent", "Bruce Banner" }; • Syntax type[] identifier = new type[] { e1,e2,e3,… }; • Unabhängig von der Deklaration möglich type[] identifier = new type[] { e1,e2,e3,… }; • Dieses Sprachkonstrukt steht nur bei der Initialisierung des Array zur Verfügung! 04.12.2013 68
  • 69. Initialisierung vom Array und Elementen • Der Begriff Initialisierung ist bei Arrays zweideutig.  Initialisierung des Arrays  Initialisierung der Elemente vom Array. • Die Deklaration ist nur für das Array selbst notwendig. Die Deklaration der Elemente ist implizit. • Technische Details:  Was passiert bei der Deklaration des Array?  Was passiert bei der Initialisierung des Array?  Was passiert bei der Initialisierung der Elemente vom Array? • Achtung! Die Größe eines Arrays ist fest  Frage: Größe von Array verändern? 04.12.2013 69
  • 70. foreach - Schleife • Funktion:  Alle Elemente eines Arrays einmal durchlaufen  Nur Lesezugriff • Syntax type array = new type[numb]; foreach(type x in array) { expr } • Beispiel foreach (int x in zahlen) { // Wertezuweisung ist nicht möglich // x *= 2; Console.Write(x + "t"); } 04.12.2013 70
  • 71. Nützliche Funktionen Funktion Beschreibung v.Length Anzahl vom Array v Häufig auch als Länge bezeichnet Array.Sort(v) Array v sortieren Array.Sort(k,v) Array v mit k verknüpfen und v anschließend mit k als Kriterium sortieren Array.Reserve(v) Die Anordnung umkehren Array.CopyTo(s,si,d,di,n) Kopiert n Element von Array s (ab Index si) in Array d (ab Index di) • Klasse „System.Array“ • Weitere Funktionen verfügbar!  http://msdn.microsoft.com/en-us/library/system.array.aspx 04.12.2013 71
  • 72. Demo: „e02_utils.cs“ Anwendung von Standardfunktionalitäten 04.12.2013 72
  • 73. Array duplizieren • Achtung! Fehler: (siehe „e03_dupl.cs“) int[] X = new int[] { 1,2,3,4,5,6,7,8,9 }; int[] Y = X; • Semantische Fehler!  Die beiden Verweise X und Y zeigen auf dasselbe Array im Heap. • Lösung: (Pseudocode)  Leeren Array erzeugen mit selbige Länge wie Quellarray  Alle Elemente kopieren • Oder über v.Clone() und Casten 04.12.2013 73
  • 74. Demo: „e03_dupl.cs“ Anwendung von Standardfunktionalitäten 04.12.2013 74
  • 75. Mehrdimensionale Arrays • Syntax: 2D Array  type[,] = new type[r,c]; • Beispiel: 2D Array  byte [,] Bild = new byte[1920, 1080]; • Syntax: 3D Array  type[,,] = new type[x,y,z]; • Dimension unbegrenzt! • Vorsicht! Nutzung von n-dimensionale Arrays  Speicherverbrauch: 𝑑1 ∗ 𝑑2 ∗ 𝑑3 ∗ ⋯ 𝑑 𝑛  Beispiel: 1 Sekunde HD-Film • 04.12.2013 1920 ∗ 1080 ∗ 25 = 51.840.000 (ca. 51 MB) 75
  • 76. Klasse ArrayList • Abstraktion von einem Array mit variable Länge • Mischen von Typen innerhalb einer Liste erlaubt: String, int, etc. • Neues Elemente aufnehmen  alist.Add(e)  alist.Insert(pos, e) e der alist hinzufügen e der alist an der Position pos hinzufügen • Elemente aus der Liste löschen  alist.Remove(e)  alist.RemoveAt(i) 04.12.2013 Element e aus der Liste entfernen Element an der Position i entfernen 76
  • 77. Demo: „e04_alist.cs“ Erstellen einer ArrayList Hinzufügen und Entfernen von Elementen 04.12.2013 77
  • 78. Vielen Dank für die Aufmerksamkeit http://www.draphony.de facebook.com/DraphonyGames 04.12.2013 78