C Sharp (C#) Martin Saternus Senior Student Partner Microsoft Deutschland GmbH i-martsa@microsoft.com
Agenda Motivation für eine neue Sprache Konzepte der Sprache Umsetzung des Common Type System Syntax von C# Eigenschaften der Sprache
Motivation für eine neue Sprache Komponentenorientierte, auf .NET Plattform zugeschnittene Sprache Unterstützung von Namespaces Native Unterstützung von Technologien der Basisklassenbibliothek Attributgetriebene deklarative Programmierung Saubere Definition der Sprache Erweiterung gegenüber bestehenden modernen Programmiersprachen
Agenda Motivation für eine neue Sprache Konzepte der Sprache Umsetzung des Common Type System Syntax von C# Eigenschaften der Sprache
Code Separation Namespaces Klassen Structs Interfaces Semantische Separation von Quellcode Verhinderung von Namenskollisionen Klassen Container für Quellcode Organisiert auf dem Heap Structs Organisiert auf dem Stack Interfaces
Vererbung Einfachvererbung von Klassen Implementierung von beliebig vielen Interfaces Implementierung von abstrakten Klassen und Methoden Syntaktische Hervorhebung beim Überschreiben (virtual, override) und Neudefinieren (new) von Methoden sealed Implementierung von nicht weitervererbbaren Klassen
Zugriffsrechte public protected private internal internal protected Öffentlicher Zugriff protected Zugriff aus der vererbten Klasse private Zugriff nur innerhalb der Klasse internal Zugriff innerhalb einer Kompilierungseinheit internal protected Zugriff innerhalb einer Kompilierungseinheit oder aus der vererbten Klasse
Agenda Motivation für eine neue Sprache Konzepte der Sprache Umsetzung des Common Type System Syntax von C# Eigenschaften der Sprache
Einheitliches Typsystem Alle Typen erben von System.Object Implizite Konvertierung eines Typen in ein Objekt ist für jeden Typ möglich Stream MemoryStream FileStream Hashtable double int object
Wert- und Referenztypen Boxing Allokiert eine Box und kopiert den Wert hinein Unboxing Prüft den Typ der Box und kopiert Wert heraus int i = 123; object o = i; int j = (int)o; 123 i o System.Int32 j
Simple Typen Integer Type IEEE Floating Point Exact Numeric Type byte, sbyte (8 bit), short, ushort (16 bit) int, uint (32 bit), long, ulong (64 bit) IEEE Floating Point float (precision of 7 digits) double (precision of 15–16 digits) Exact Numeric Type decimal (28 significant digits) Character Types char (single character) string (rich functionality, by-reference type) Boolean Type bool
Agenda Motivation für eine neue Sprache Konzepte der Sprache Umsetzung des Common Type System Syntax von C# Eigenschaften der Sprache
Namespaces Deklaration mit dem Schlüsselwort namespace Referenzierung mit dem Schüsselwort using Keine Bindung an Dateisystem using <Namespace>; namespace <Namespace.Subnamespace> { }
Klassen Enthalten Felder, Properties, Indexer, Methoden, Delegaten, Events Abstrakte Klassen können abstrakte Methoden enthalten Erlauben Einfachvererbung Können von beliebig vielen Interfaces erben Unabhängig vom Dateinamen [Modifizierer] class <Klassenname> [: Basisklasse, Interfaces] { }
Structs Structs sind limitiert Nutzen Eingeschränkte OO Fähigkeiten Werden „geboxt“ wenn sie zu Collections hinzugefügt werden Nutzen Interop Typen wie z.B. komplexe Zahlen Große Datenfelder [Modifizierer] struct <Name> { }
Interfaces Interfaces sind Typen, die keine Implementierung enthalten (alle Methoden sind abstrakt) nicht instanziiert werden können öffentliche Elemente besitzen nur von anderen Interfaces erben können [Modifizierer] interface <Name> [: Interfaces] { }
Felder Klassenvariablen (in Java Attribute) werden in C# als Felder oder eng. Fields bezeichnet Felder müssen im Gegensatz zu lokalen Variablen keinen Wert zugewiesen bekommen Konstante Felder const – Wert wird zur Kompilierungszeit festgelegt readonly – Wert wird im Konstruktor festgelegt [Modifizierer] [const, readonly] <Typ> <Variable>; public readonly string Name;
Properties Komposition aus Feldern und Methoden Schlüsselwort value enthält Wert bei Zuweisung Nutzen bei Schreib- oder lesegeschützten Feldern Validierungen bei Zuweisungen Berechnungen von Werten [Modifizierer] <Typ> <Name> { get { return <Variable>; } set { <Variable> = value; } }
Indexer Properties für Felder und Collections Basierend auf der Property-Idee Konsistenter Weg zur Container-Erstellung [Modifizierer] <Typ> this[<Typ> <Name>] { get { return <Variable[Name]>; } set { <Variable[Name]> = value; } }
Methoden Methoden können überladen werden, müssen aber verschiedene Signaturen besitzen Überschreiben Deklaration als virtual in der Basisklasse Deklaration als override in der abgeleiteten Klasse Neudefinition mit Schlüssenwort new Variable Parameterlisten können mit dem Schlüsselwort params erzeugt werden [Modifizierer] <Typ> <Methodenname> ([<Typ> <Variable>, …]) { }
Delegates und Events Delegates Events Ähnlich zu Funktionspointern in C und C++ Stark typisiert Events Werden über einen Eventhandler konsumiert [Modifizierer] <Typ> delegate <Name> ([<Typ> <Variable>, …]); [Modifizierer] event <Delegate> <EventName>; <Variable>.<EventName> += new <DelegateName>(<Funktionspointer);
Ausdrücke if (<boolscher Ausdruck) { … } {else { … } } switch (<Variable>) { case: <Konstante> break; } While (<boolscher Ausdruck>) { … } do { … } while(<boolscher Ausdruck>) for (<Init>; <boolscher Ausdruck>; <Modi>) { … } foreach (<Typ> <Variable> in <ICollection impl. Typ) { … }
Agenda Motivation für eine neue Sprache Konzepte der Sprache Umsetzung des Common Type System Syntax von C# Eigenschaften der Sprache
Fehlerbehandlung Fehlerbehandlung durch Ausnahmen Ausnahmen werden von System.Exception abgeleitet Abarbeitung von der speziellsten zur allgemeinsten Ausnahme try { } catch ([<Exception Typ> Variable]) [finally }]
Attribute Strukturierte Möglichkeit, Metadaten an Quellcode zu heften Auswertung zur Laufzeit über Reflections Attribute sind Klassen Einheitliche Vorgehensweise erleichtert die Definition eigener Attribute Attribute können an Typen und Member „angehängt“ werden C# Syntax für Attribute Attribute werden einem Subjekt mit eckigen Klammern vorangestellt
Operatoren überladen Operatoren, die überladen werden können Arithmetische Relationale Logische Operatoren, die nicht überladen werden können Spezielle Operatoren sizeof new is typeof
Überlauf-Überprüfung Integer Arithmetiken C, C++ Überlauf checked vs. unchecked Standardmäßig unchecked, mit Ausnahme von Konstanten Änderung durch Compileranweisung “/checked” int i = checked (x * y); checked { int i = x * y; }
Arbeiten mit Pointern Schlüsselwort “ref , um Ein- und Ausgabe-Parameter zu übergeben Schlüsselwort “out”, um Ausgabe-Parameter zu übergeben Schlüsselwörter “ref/out” müssen in Methoden- und Aufrufsignaturen angegeben werden static void Swap(ref int a, ref int b) {...} static void Main() { int x = 1, y = 2; Swap(ref x, ref y); }
Fragen ??? Weiter geht’s am Ask The Expert Stand!