320 likes | 542 Views
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.
E N D
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 • Semantische Separation von Quellcode • Verhinderung von Namenskollisionen • Klassen • Container für Quellcode • Organisiert auf dem Heap • Structs • Container für Quellcode • 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 • Ö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 object Stream Hashtable int double MemoryStream FileStream • Alle Typen erben von System.Object • Implizite Konvertierung eines Typen in ein Objekt ist für jeden Typ möglich
Wert- und Referenztypen int i = 123; object o = i; int j = (int)o; 123 i System.Int32 o 123 123 j • Boxing • Allokiert eine Box und kopiert den Wert hinein • Unboxing • Prüft den Typ der Box und kopiert Wert heraus
Simple Typen • Integer 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 • 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 Kompilierungszeitfestgelegt • 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 • Ä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!