Technische Universität München Einführung in C# Maximilian Irlbeck Lehrstuhl für Software & Systems Engineering 22. Oktober 2010 Technische Universität München Inhalt 1. Grundlagen Historie Allgemeine Infos zu C# 2. Sprachdesign 3. Sprachfeatures/-syntax 22.10.2010 Maximilian Irlbeck: Einführung in C# 2 Technische Universität München 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 Technische Universität München 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 Technische Universität München 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 Technische Universität München 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 Technische Universität München Inhalt 1. Grundlagen 2. Sprachdesign Paradigmen in C# Typisierung Ordnungsstrukturen 3. Sprachfeatures/-syntax 22.10.2010 Maximilian Irlbeck: Einführung in C# 7 Technische Universität München 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 Technische Universität München 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 Technische Universität München Typisierung II: Basistypen Datentyp Beschreibung bool Boolesche Ausdrücke: true, false sbyte/byte, short/ushort, int/uint, long/ulong Vorzeichenbehaftete/vorzeichenlose Ganzzahlen float, double Fließkommazahlen decimal hochpräziser, dezimaler Datentyp 128 bit char Einzelnes Unicode Zeichen 16 bit string Zeichenketten: „Hello World“ Variabel enum Aufzählungstyp enum EnumName { Option1, Option2,…,OptionN } Variabel object Wurzel aller anderen Typen 22.10.2010 Maximilian Irlbeck: Einführung in C# Größe 8 bit 16 bit 32 bit 64 bit 32 bit, 64 bit 10 Technische Universität München 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 Container für Methoden, Felder, Properties, Events, Delegates, Klassen, Structs class unterstützt im Gegensatz zu struct auch Vererbung 22.10.2010 Maximilian Irlbeck: Einführung in C# 11 Technische Universität München Ordnungsstrukturen II: Namespaces Alle Basisstrukturen werden mit sogenannten Namespaces geordnet. Namespace bildet eine hierarchische Ordnungsstruktur, auf die mit dem Scope Operator („.“) zugegriffen werden kann. Beispiel: System.DateTime System.Xml.XmlDocument System.Xml.Serialization.XmlSerializer = Namespace 22.10.2010 Maximilian Irlbeck: Einführung in C# 12 Technische Universität München 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 Technische Universität München Hello World! Namespace benutzen using System; Namespace namespace HelloWorld Klasse { class HelloWorldClass { Methode String Array [STAThread] static void Main(string[] args) Kommentar { // Show yourself to the world outside Console.WriteLine("Hello World!"); } Statischer } Methodenaufruf } 22.10.2010 Maximilian Irlbeck: Einführung in C# 14 Technische Universität München Klassen public class Foo : ICloneable, FooBase { private int myInt = 0; public int MyInt { get { return myInt; } set { myInt = value; } } internal Foo() { … } Vererbungsliste Feld Property Konstruktor protected void DoSomething(int times) { … } Methode } 22.10.2010 Maximilian Irlbeck: Einführung in C# 15 Technische Universität München Objekte Foo f = new Foo(); f.MyInt = 1; Konstruktoraufruf Propertyzuweisung Foo g = new Foo(); g.DoSomething(3); Konstruktoraufruf f.MyInt = g.MyInt; Propertyzuweisung f.myInt = 0; 22.10.2010 Methodenaufruf Feldzuweisung Maximilian Irlbeck: Einführung in C# 16 Technische Universität München 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 Technische Universität München Methoden Allgemeine Struktur: <Sichtbarkeit> <Rückgabetyp> <Name>(<Parameterliste>) { // Implementierung } Beispiel: public int Max(int first, int second) { if (first >= second) { return first; } else { return second; } } 22.10.2010 Maximilian Irlbeck: Einführung in C# 18 Technische Universität München Scopes public class Foo { private int myInt = 0; public void DoSomething() { int localVar = 1; if(myInt == 0) { string s = „Hello World“; } } } 22.10.2010 Maximilian Irlbeck: Einführung in C# myInt localVar s 19 Technische Universität München Sichtbarkeitsstufen Stufe Sichtbarkeit public Überall internal innerhalb der gleichen Assembly protected innerhalb der erbenden Klasse internal protected innerhalb der erbenden Klassen in der gleichen Assembly private nur innerhalb der Klasse 22.10.2010 Maximilian Irlbeck: Einführung in C# 20 Technische Universität München Verzweigungen if (<Bedingung1>) { // some Code here } else if (<Bedingung2>) { // other code here } else { // the rest here } 22.10.2010 switch (<Variable>) { case Case1: /*Code ... case CaseN-1: /*Code case CaseN: /*Code default: /*Code } Maximilian Irlbeck: Einführung in C# here*/ break; here*/ break; here*/ break; here*/ break; 21 Technische Universität München Schleifen while (<Bedingung1>) { // looped Code here } for (<Init>;<Condition>;<Step>) { // looped code here } do { foreach (ElementTyp name in Auflistung) { // looped code here } // looped code here } while (<Bedingung2>); Zusätzliche Schlüsselwörter: - break gesamte Schleife verlassen - continue Schleifenlauf abbrechen 22.10.2010 Maximilian Irlbeck: Einführung in C# 22 Technische Universität München 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 Technische Universität München 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 Technische Universität München Exceptions & Exceptionhandling try { throw new Exception("Error text"); } catch { // } catch { // } (NullReferenceException) Catch only NullReference Exceptions (Exception ex) Catch all exceptions 22.10.2010 Maximilian Irlbeck: Einführung in C# 25 Technische Universität München 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 Technische Universität München 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 Technische Universität München 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 Technische Universität München 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 Technische Universität München Get Started! https://prod.maniac.tum.de/ManiacGUI Vielen Dank.