Upload
viktoria-ziesmer
View
111
Download
4
Embed Size (px)
Citation preview
C Sharp (C#)C Sharp (C#)
Martin SaternusSenior Student Partner
Microsoft Deutschland [email protected]
AgendaAgenda
• 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 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
AgendaAgenda
• Motivation für eine neue Sprache• Konzepte der Sprache• Umsetzung des Common Type System• Syntax von C#• Eigenschaften der Sprache
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
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
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
AgendaAgenda
• Motivation für eine neue Sprache• Konzepte der Sprache• Umsetzung des Common Type System• Syntax von C#• Eigenschaften der Sprache
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
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
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
AgendaAgenda
• Motivation für eine neue Sprache• Konzepte der Sprache• Umsetzung des Common Type System• Syntax von C#• Eigenschaften der Sprache
NamespacesNamespaces
• Deklaration mit dem Schlüsselwort namespace
• Referenzierung mit dem Schüsselwort using• Keine Bindung an Dateisystem
using <Namespace>;
namespace <Namespace.Subnamespace>{}
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]{}
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> {}
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]{}
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;
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; }
}
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; }
}
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>, …]){}
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);
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) { … }
AgendaAgenda
• Motivation für eine neue Sprache• Konzepte der Sprache• Umsetzung des Common Type System• Syntax von C#• Eigenschaften der Sprache
FehlerbehandlungFehlerbehandlung
• Fehlerbehandlung durch Ausnahmen• Ausnahmen werden von System.Exception
abgeleitet• Abarbeitung von der speziellsten zur
allgemeinsten Ausnahme
try{}catch ([<Exception Typ> Variable]){}[finally{}]
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
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
Ü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;}
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);}
Fragen ???Fragen ???
• Weiter geht’s am Ask The Expert Stand!