C Sharp (C#) Martin Saternus Senior Student Partner Microsoft Deutschland GmbH...

29
C Sharp (C#) C Sharp (C#) Martin Saternus Senior Student Partner Microsoft Deutschland GmbH [email protected]

Transcript of C Sharp (C#) Martin Saternus Senior Student Partner Microsoft Deutschland GmbH...

Page 1: C Sharp (C#) Martin Saternus Senior Student Partner Microsoft Deutschland GmbH i-martsa@microsoft.com.

C Sharp (C#)C Sharp (C#)

Martin SaternusSenior Student Partner

Microsoft Deutschland [email protected]

Page 2: C Sharp (C#) Martin Saternus Senior Student Partner Microsoft Deutschland GmbH i-martsa@microsoft.com.

AgendaAgenda

• Motivation für eine neue Sprache• Konzepte der Sprache• Umsetzung des Common Type System• Syntax von C#• Eigenschaften der Sprache

Page 3: C Sharp (C#) Martin Saternus Senior Student Partner Microsoft Deutschland GmbH i-martsa@microsoft.com.

Motivation für eine neue SpracheMotivation 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

Page 4: C Sharp (C#) Martin Saternus Senior Student Partner Microsoft Deutschland GmbH i-martsa@microsoft.com.

AgendaAgenda

• Motivation für eine neue Sprache• Konzepte der Sprache• Umsetzung des Common Type System• Syntax von C#• Eigenschaften der Sprache

Page 5: C Sharp (C#) Martin Saternus Senior Student Partner Microsoft Deutschland GmbH i-martsa@microsoft.com.

Code SeparationCode 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

Page 6: C Sharp (C#) Martin Saternus Senior Student Partner Microsoft Deutschland GmbH i-martsa@microsoft.com.

VererbungVererbung

• 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

Page 7: C Sharp (C#) Martin Saternus Senior Student Partner Microsoft Deutschland GmbH i-martsa@microsoft.com.

ZugriffsrechteZugriffsrechte

• 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

Page 8: C Sharp (C#) Martin Saternus Senior Student Partner Microsoft Deutschland GmbH i-martsa@microsoft.com.

AgendaAgenda

• Motivation für eine neue Sprache• Konzepte der Sprache• Umsetzung des Common Type System• Syntax von C#• Eigenschaften der Sprache

Page 9: C Sharp (C#) Martin Saternus Senior Student Partner Microsoft Deutschland GmbH i-martsa@microsoft.com.

Einheitliches TypsystemEinheitliches 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 doubleint

object

Page 10: C Sharp (C#) Martin Saternus Senior Student Partner Microsoft Deutschland GmbH i-martsa@microsoft.com.

Wert- und ReferenztypenWert- 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;int i = 123;object o = i;object o = i;int j = (int)o;int j = (int)o;

123i

o

123

System.Int32

123j

Page 11: C Sharp (C#) Martin Saternus Senior Student Partner Microsoft Deutschland GmbH i-martsa@microsoft.com.

Simple TypenSimple 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

Page 12: C Sharp (C#) Martin Saternus Senior Student Partner Microsoft Deutschland GmbH i-martsa@microsoft.com.

AgendaAgenda

• Motivation für eine neue Sprache• Konzepte der Sprache• Umsetzung des Common Type System• Syntax von C#• Eigenschaften der Sprache

Page 13: C Sharp (C#) Martin Saternus Senior Student Partner Microsoft Deutschland GmbH i-martsa@microsoft.com.

NamespacesNamespaces

• Deklaration mit dem Schlüsselwort namespace

• Referenzierung mit dem Schüsselwort using• Keine Bindung an Dateisystem

using <Namespace>;

namespace <Namespace.Subnamespace>{}

Page 14: C Sharp (C#) Martin Saternus Senior Student Partner Microsoft Deutschland GmbH i-martsa@microsoft.com.

KlassenKlassen

• 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]{}

Page 15: C Sharp (C#) Martin Saternus Senior Student Partner Microsoft Deutschland GmbH i-martsa@microsoft.com.

StructsStructs

• 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> {}

Page 16: C Sharp (C#) Martin Saternus Senior Student Partner Microsoft Deutschland GmbH i-martsa@microsoft.com.

InterfacesInterfaces

• 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]{}

Page 17: C Sharp (C#) Martin Saternus Senior Student Partner Microsoft Deutschland GmbH i-martsa@microsoft.com.

FelderFelder

• 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;

Page 18: C Sharp (C#) Martin Saternus Senior Student Partner Microsoft Deutschland GmbH i-martsa@microsoft.com.

PropertiesProperties

• 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; }

}

Page 19: C Sharp (C#) Martin Saternus Senior Student Partner Microsoft Deutschland GmbH i-martsa@microsoft.com.

IndexerIndexer

• 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; }

}

Page 20: C Sharp (C#) Martin Saternus Senior Student Partner Microsoft Deutschland GmbH i-martsa@microsoft.com.

MethodenMethoden

• 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>, …]){}

Page 21: C Sharp (C#) Martin Saternus Senior Student Partner Microsoft Deutschland GmbH i-martsa@microsoft.com.

Delegates und EventsDelegates 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);

Page 22: C Sharp (C#) Martin Saternus Senior Student Partner Microsoft Deutschland GmbH i-martsa@microsoft.com.

AusdrückeAusdrü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) { … }

Page 23: C Sharp (C#) Martin Saternus Senior Student Partner Microsoft Deutschland GmbH i-martsa@microsoft.com.

AgendaAgenda

• Motivation für eine neue Sprache• Konzepte der Sprache• Umsetzung des Common Type System• Syntax von C#• Eigenschaften der Sprache

Page 24: C Sharp (C#) Martin Saternus Senior Student Partner Microsoft Deutschland GmbH i-martsa@microsoft.com.

FehlerbehandlungFehlerbehandlung

• Fehlerbehandlung durch Ausnahmen• Ausnahmen werden von System.Exception

abgeleitet• Abarbeitung von der speziellsten zur

allgemeinsten Ausnahme

try{}catch ([<Exception Typ> Variable]){}[finally{}]

Page 25: C Sharp (C#) Martin Saternus Senior Student Partner Microsoft Deutschland GmbH i-martsa@microsoft.com.

AttributeAttribute

• 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

Page 26: C Sharp (C#) Martin Saternus Senior Student Partner Microsoft Deutschland GmbH i-martsa@microsoft.com.

Operatoren überladenOperatoren überladen

• Operatoren, die überladen werden können– Arithmetische– Relationale – Logische

• Operatoren, die nicht überladen werden können– Spezielle Operatoren

• sizeof • new • is • typeof

Page 27: C Sharp (C#) Martin Saternus Senior Student Partner Microsoft Deutschland GmbH i-martsa@microsoft.com.

Überlauf-ÜberprüfungÜ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;}

Page 28: C Sharp (C#) Martin Saternus Senior Student Partner Microsoft Deutschland GmbH i-martsa@microsoft.com.

Arbeiten mit PointernArbeiten 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);}

Page 29: C Sharp (C#) Martin Saternus Senior Student Partner Microsoft Deutschland GmbH i-martsa@microsoft.com.

Fragen ???Fragen ???

• Weiter geht’s am Ask The Expert Stand!