Einführung in C# Maximilian Irlbeck Lehrstuhl für Software & Systems Engineering 22. Oktober 2010
Inhalt 1. Grundlagen Historie Allgemeine Infos zu C# 2. Sprachdesign 3. Sprachfeatures/-syntax 22.10.2010 Maximilian Irlbeck: Einführung in C# 2
Historie I: C# ist cool. 1990 s Erste Klassen für Next Generation Windows Services werden in SMC verfasst (Simple Managed C, smack ) Hejlsberg 99 Start der Entwicklung an Cool für.net (C-like Object Oriented Language) Juli 2000, PDC Erste Öffentliche Präsentation des.net Frameworks, Umbenennung von Cool in C# (sprich: C Sharp) Anders Hejlsberg Technical Fellow und Chief Architect, C# Vater von TurboPascal, Delphi 22.10.2010 Maximilian Irlbeck: Einführung in C# 3
Historie II: C# 1.0 4.0 C# 1.0 (01/2002) wird zusammen mit.net 1.0 released C# 1.2 (04/2003) C# 2.0 (11/2005) Generics, Partielle Klassen, Statische Klassen, Anonyme Delegaten, Nullable Types C# 3.0 (11/2007) LinQ, Anonyme Typen, Lambda Ausdrücke, Extension methods, Object/Collection Initializer C# 4.0 (04/2010) Dynamic member lookup, Co-/Contravariance, Named/Optional parameters 22.10.2010 Maximilian Irlbeck: Einführung in C# 4
Allgemeine Infos zu C# C# ist standardisiert unter ISO/IEC 23270, ECMA 334 C# wurde beeinflusst von Java C/C++ Pascal/Delphi Haskell Modula-3 Visual Basic C# kann in folgenden IDEs benutzt werden: Microsoft Visual Studio 2003, 2005, 2008, 2010 SharpDevelop MonoDevelop XNA Game Studio C#-Builder Baltie 22.10.2010 Maximilian Irlbeck: Einführung in C# 5
Allgemeine Infos zu C# Der Ursprung des Namens C : Symbol für den in der Musik durch ein Kreuz ( ) um einen Halbton erhöhten Ton C, das Cis. Englisch: C sharp. C# Dialekte/Derivate: Spec# Sing# Cω extensible C# (XC#) Multiprocessor C# (MC#) Metaphor Polyphonic C# Vala 22.10.2010 Maximilian Irlbeck: Einführung in C# 6
Inhalt 1. Grundlagen 2. Sprachdesign Paradigmen in C# Typisierung Ordnungsstrukturen 3. Sprachfeatures/-syntax 22.10.2010 Maximilian Irlbeck: Einführung in C# 7
Paradigmen in C# C# unterstützt folgende Programmierparadigmen: Strukturierte Programmierung Imperative Programmierung Funktionale Programmierung Komponentenorientierte Programmierung Objektorientierte Programmierung Ereignisbasierte Programmierung Generische Programmierung Aspektorientierte Programmierung 22.10.2010 Maximilian Irlbeck: Einführung in C# 8
Typisierung C# ist eine streng typisierte, objektorientierte Sprache Zwei Arten von Typen: Referenztypen (class, interface) Werttypen (struct, enum, Basistypen) Jeder Typ erbt automatisch von object, d.h. alle Typen bieten die Methoden von object an wie ToString() Für Referenztypen existiert ein Sondertyp: null die leere Referenz 22.10.2010 Maximilian Irlbeck: Einführung in C# 9
Typisierung II: Basistypen Datentyp Beschreibung Größe bool Boolesche Ausdrücke: true, false sbyte/byte, short/ushort, int/uint, long/ulong Vorzeichenbehaftete/vorzeichenlose Ganzzahlen 8 bit 16 bit 32 bit 64 bit float, double Fließkommazahlen 32 bit, 64 bit decimal hochpräziser, dezimaler Datentyp 128 bit char Einzelnes Unicode Zeichen 16 bit string Zeichenketten: Hello World Variabel enum object Aufzählungstyp enum EnumName Option1, Option2,,OptionN Wurzel aller anderen Typen Variabel 22.10.2010 Maximilian Irlbeck: Einführung in C# 10
Ordnungsstrukturen I: Basisstrukturen Basisstrukturen: enum, delegate, interface, struct, class enum Aufzählungstyp, Beispiele: Tastaturkeys, Wochentage, delegate Definiert eine bestimmte Methodensignatur interface Definiert eine Menge von Signaturen class, struct class Container für Methoden, Felder, Properties, Events, Delegates, Klassen, Structs unterstützt im Gegensatz zu struct auch Vererbung 22.10.2010 Maximilian Irlbeck: Einführung in C# 11
Ordnungsstrukturen II: Namespaces Alle Basisstrukturen werden mit sogenannten Namespaces geordnet. Namespace Beispiel: bildet eine hierarchische Ordnungsstruktur, auf die mit dem Scope Operator (. ) zugegriffen werden kann. System.DateTime System.Xml.XmlDocument System.Xml.Serialization.XmlSerializer = Namespace 22.10.2010 Maximilian Irlbeck: Einführung in C# 12
Inhalt 1. Grundlagen 2. Sprachdesign 3. Sprachfeatures/-syntax Klassen, Objekte, Interfaces, Methoden, Scopes Sichtbarkeit, Schleifen, Generics Exceptions, Operatoren, Arrays Vergleich mit anderen Sprachen 22.10.2010 Maximilian Irlbeck: Einführung in C# 13
Hello World! using System; Namespace benutzen Namespace namespace HelloWorld class HelloWorldClass [STAThread] static void Main(string[] args) Methode Klasse // Show yourself to the world outside Console.WriteLine("Hello World!"); Statischer Methodenaufruf String Array Kommentar 22.10.2010 Maximilian Irlbeck: Einführung in C# 14
Klassen public class Foo : ICloneable, FooBase private int myint = 0; public int MyInt get return myint; set myint = value; Vererbungsliste Feld Property internal Foo() Konstruktor protected void DoSomething(int times) Methode 22.10.2010 Maximilian Irlbeck: Einführung in C# 15
Objekte Foo f = new Foo(); f.myint = 1; Konstruktoraufruf Propertyzuweisung Foo g = new Foo(); g.dosomething(3); Konstruktoraufruf Methodenaufruf f.myint = g.myint; Propertyzuweisung f.myint = 0; Feldzuweisung 22.10.2010 Maximilian Irlbeck: Einführung in C# 16
Interfaces public interface ISomeInterface int MyProperty get; set; string SomeMethod(); public class Implementer : ISomeInterface public int MyProperty get set public string SomeMethod() 22.10.2010 Maximilian Irlbeck: Einführung in C# 17
Methoden Allgemeine Struktur: <Sichtbarkeit> <Rückgabetyp> <Name>(<Parameterliste>) // Implementierung Beispiel: public int Max(int first, int second) if (first >= second) else return first; return second; 22.10.2010 Maximilian Irlbeck: Einführung in C# 18
Scopes public class Foo private int myint = 0; public void DoSomething() int localvar = 1; if(myint == 0) string s = Hello World ; myint localvar s 22.10.2010 Maximilian Irlbeck: Einführung in C# 19
Sichtbarkeitsstufen Stufe public internal protected internal protected private Sichtbarkeit Überall innerhalb der gleichen Assembly innerhalb der erbenden Klasse innerhalb der erbenden Klassen in der gleichen Assembly nur innerhalb der Klasse 22.10.2010 Maximilian Irlbeck: Einführung in C# 20
Verzweigungen if (<Bedingung1>) // some Code here else if (<Bedingung2>) // other code here else // the rest here switch (<Variable>) case Case1: /*Code here*/ break;... case CaseN-1: /*Code here*/ break; case CaseN: /*Code here*/ break; default: /*Code here*/ break; 22.10.2010 Maximilian Irlbeck: Einführung in C# 21
Schleifen while (<Bedingung1>) // looped Code here for (<Init>;<Condition>;<Step>) // looped code here do // looped code here while (<Bedingung2>); foreach (ElementTyp name in Auflistung) // looped code here Zusätzliche Schlüsselwörter: - break gesamte Schleife verlassen - continue Schleifenlauf abbrechen 22.10.2010 Maximilian Irlbeck: Einführung in C# 22
Operatoren Vergleichsoperatoren: == prüft auf Gleichheit; nicht verwechseln mit Zuweisung (z.b. a = 3)!= prüft auf Ungleichheit <, >, <=, prüft auf Erfüllung der entsprechenden Relationen >= Logische Verknüpfungen! NOT (Negation, unär) && bedingtes AND bedingtes OR Typprüfungen und Casts is, typeof Typkompatibilität, Typexploration as Umwandlung (geprüft) (<Typ>) Umwandlung (ungeprüft, Ausnahme bei Fehler) 22.10.2010 Maximilian Irlbeck: Einführung in C# 23
Operatoren II Arithmetische Operatoren: +, -, *, / Grundrechenarten ++, -- Inkrement, Dekrement % Modulo Zugriffs-/Zuweisungsoperatoren [<Wert>] Zugriff auf indexierte Datenstruktur = Zuweisung +=, -=, *=, kombinierte Zuweisung Bitoperationen <<, >> Bitshifting &,,!, ^ Logisches AND, OR, NOT, XOR Sehr viele Operatoren können in C# überladen werden. 22.10.2010 Maximilian Irlbeck: Einführung in C# 24
Exceptions & Exceptionhandling try throw new Exception("Error text"); catch (NullReferenceException) // Catch only NullReference Exceptions catch (Exception ex) // Catch all exceptions 22.10.2010 Maximilian Irlbeck: Einführung in C# 25
Generics Generische Klasse: class GenericClass<T> where T : IComparable T member; Generische Methode: U GenericMethod<T,U>(T input) where T : new() T tval = new T(); 22.10.2010 Maximilian Irlbeck: Einführung in C# 26
Arrays string[] mystrings = new string[10]; null null null null null null null null null null 0 1 2 3 4 5 6 7 8 9 mystrings[2] = "Hi"; null null "Hi" null null null null null null null 0 1 2 3 4 5 6 7 8 9 mystrings[7] = mystrings[2]; null null "Hi" null null null null "Hi" null null 0 1 2 3 4 5 6 7 8 9 22.10.2010 Maximilian Irlbeck: Einführung in C# 27
Unterschiede zu C/C++ Pointer nur in spezieller unsafe Umgebung in C# Garbage Collection, kein Speichermanagement nötig in C# Keine mehrfache Klassenvererbung in C# throw nur für Exceptions möglich in C# Events in C#, kein einheitliches Äquivalent in C++ Präprozessorbefehle in C++ sehr viel mächtiger 22.10.2010 Maximilian Irlbeck: Einführung in C# 28
Unterschiede zu Java Hardwarenahe Programmierung in C# möglich, in Java nicht (Pointer und Pointerarithmetik) Properties in C#, in Java mit Methoden à la GetX() und SetX() gelöst Kein throws in C# wie in Java Operator Überladung in C# möglich, in Java nicht Java: new String( Hello ) == new String( Hello ) -> false C#: new String( Hello ) == new String( Hello )->true Optionale/Default Methoden Parameter in C# Generics in C# mit Constraints einschränkbar 22.10.2010 Maximilian Irlbeck: Einführung in C# 29
Get Started! https://prod.maniac.tum.de/maniacgui Vielen Dank.