1. Einführung in C#
Präsentation von:
Georg Hinkel
Microsoft Student Partner
KIT Karlsruhe
Georg.hinkel@studentpartners.de
2. 2
Agenda
• .NET Architektur, Terminologie
• Syntax C#
– Kontrollstrukturen, Namenskonventionen
– Properties
– Delegates, Events
• Werttypen vs. Referenztypen
Einführung in .NET und C# - Georg Hinkel
3. Grober Aufbau der Plattform und Klärung der Begriffe
Architektur & Terminologie
4. 4
Architektur
Programmiersprache (Standard: Common Language
Specification, CLS), e.g. C#, Visual Basic
IL-Code (Früher Microsoft Intermediate Language)
Heute meist nur Intermediate Language (IL)
Virtuelle Maschine, die den IL-Code ausführt
Standardimplementierung:
Common Language Runtime (CLR)
Bildquelle: Wikipedia
Einführung in .NET und C# - Georg Hinkel
5. 5
Common Language Specification
• Definiert den gemeinsamen Nenner aller .NET-
Sprachen
– Einfachvererbung (Mehrfachvererbung nicht erlaubt)
– Common Type System
• Definiert Basisdatentypen
– Int32 ist 32 bit lang, Int64 64 bit lang
– Zeichenketten codiert in Unicode 16 „Little Endian“
– Properties, Delegates, Events, u.a. (kommt später)
Einführung in .NET und C# - Georg Hinkel
6. 6
Intermediate Language
• Stackbasierter Bytecode
• Aus den fertigen Kompilaten direkt ablesbar
– Mit Spezialprogrammen (.NET Reflector) Quellcode
rekonstruierbar
– Techniken um Rekonstruktion des Quellcodes zu
verhindern notwendig
Einführung in .NET und C# - Georg Hinkel
7. 7
Common Language Runtime (CLR)
• Virtuelle Maschine mit Laufzeitumgebung
– Dadurch plattformunabhängig
– CLR nur für Windows erhältlich
– Mono Projekt: CLR für Linux
Einführung in .NET und C# - Georg Hinkel
8. 8
Auswahl der .NET-Sprachen
• C#, Visual Basic, Managed C++, F#
– Offiziell von Microsoft unterstützt
• Cω, Asml, Spec#, Polyphonic C#
– Forschungssprachen von Microsoft Research
• GrGen.NET
– Programmierung mit Graphen
• Boo, J#, Jscript.NET, Clarion.NET u.v.m
Einführung in .NET und C# - Georg Hinkel
9. 9
Auswahl der .NET-Sprachen
• C#, Visual Basic, Managed C++, F#
– Offiziell von Microsoft unterstützt
• Cω, Asml, Spec#, Polyphonic C#
– Forschungssprachen von Microsoft Research
• GrGen.NET
– Programmierung mit Graphen
• Boo, J#, Jscript.NET, Clarion.NET u.v.m
• …etwa 10-20 weitere
Einführung in .NET und C# - Georg Hinkel
10. 10
Auswahl der .NET-Sprachen
• C#, Visual Basic, Managed C++, F#
– Offiziell von Microsoft unterstützt
• Cω, Asml, Spec#, Polyphonic C# matter“
„The language doesn‘t
– Forschungssprachen von Microsoft Research
Dan Appleman
• GrGen.NET
– Entwickelt am IPD/Uni Karlsruhe
• Boo, J#, Jscript.NET, Clarion.NET u.v.m
• …etwa 10-20 weitere
Einführung in .NET und C# - Georg Hinkel
11. 11
Zusammenfassung
• Grobe Architektur ähnlich
Java
• Sprachvielfalt
Einführung in .NET und C# - Georg Hinkel
13. 13
Klassen
• Hier kein Grundkurs der Objektorientierung
(Zeit!)
• Literatur: Galileo Openbook
– http://openbook.galileocomputing.de/visual_csharp
_2010/
– http://openbook.galileocomputing.de/oop/
Einführung in .NET und C# - Georg Hinkel
14. 14
Klassen – Syntax in C#
/// <summary>
/// Nur zu Demonstrationszwecken
/// </summary>
public class A : B, ICalculator
{
public int Calc()
{
if (this.Id < 2)
{
return 0;
}
return 1;
}
}
Einführung in .NET und C# - Georg Hinkel
15. 15
Klassen – Syntax in C#
Basisklasse Schnittstelle
/// <summary>
Klassenname /// Nur zu Demonstrationszwecken
/// </summary>
public class A : B, ICalculator
{
public int Calc()
{
if (this.Id < 2)
{
Methodendefinition return 0;
} Property
return 1;
}
}
Einführung in .NET und C# - Georg Hinkel
16. 16
Kontrollstrukturen
• Bedingte einfache Sprünge
– if-Anweisung
• Schleifen
– do/while-Schleifen
– for-Schleifen
• Iterierte Schleifen mit foreach
• LINQ
Einführung in .NET und C# - Georg Hinkel
17. 17
Namenskonventionen
Subjekt .NET
Namensraum Pascal Case
Klassennamen Pascal Case
Methodennamen Pascal Case
Klassenvariablen Camel Case
Properties, Events Pascal Case
Lokale Variablen Camel Case
Schnittstellen Beginnen mit I
• Pascal Case: Alle Worte groß geschrieben, ohne Leerzeichen
• Camel Case: Wie Pascal Case, jedoch erster Buchstabe des ersten Wortes
auch klein
Einführung in .NET und C# - Georg Hinkel
18. 18
Nomenklautur
Objektorientierung allgemein .NET
Klasse Klasse
- Struktur/Struct
- Delegate
- Event/Ereignis
Attribut Klassenvariable/Feld
Feld Array
- (Annotation in Java) Attribut
- Property
Methode Methode
Funktion Funktion
Einführung in .NET und C# - Georg Hinkel
19. 19
Properties
• „Eigenschaften“ eines Objekts
– Getter/Setter-Paar
– Automatisiert möglich
• Bestandteil der CLS
• Ähnlich Java „Beans-Architektur“
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
Alternative Schreibweise (automatisiert):
public string Name { get; set; }
Einführung in .NET und C# - Georg Hinkel
20. 20
Properties - Vorteile
• Problem: Wieviel Berechnungsaufwand steckt
hinter der Auswertung einer parameterlosen
Funktion?
• Semantischer Unterschied
– Funktionen, die „nur“ Klassenvariablen zurückgeben
– Funktionen, die „hohen“ Berechnungsaufwand für
die Auswertung benötigen
Einführung in .NET und C# - Georg Hinkel
21. 21
Properties - Vorteile
• Problem: Wieviel Berechnungsaufwand steckt hinter
der Auswertung einer parameterlosen Funktion?
• Semantischer Unterschied
– Funktionen, die „nur“ Klassenvariablen zurückgeben
– Funktionen, die „hohen“ Berechnungsaufwand für die
Auswertung benötigen
• Mit Properties: Syntaktischer Unterschied
Einführung in .NET und C# - Georg Hinkel
22. 22
Delegates
• Ähnlich Funktionszeigern in C, nur mit Objekt
• Ein Delegate ist eine Klasse, also ein Datentyp
public delegate void Foovoid()
• Verketten und Herauslösen möglich (e.g.
Methode Delegate.Combine)
• Bestandteil der CLS
Einführung in .NET und C# - Georg Hinkel
23. 23
Events
• Ähnlich Klassenvariable, aber es sind nach außen
nur die Operationen Verketten und Herauslösen
möglich public event Foovoid FooHappened;
• Bestandteil der CLS
• Faktisch in der Sprache implementiertes
Observer-Pattern („Beobachtermuster“)
Einführung in .NET und C# - Georg Hinkel
24. 24
Events – Konventionen (1)
• Objektorientierter Ansatz
– Parameter/Rückgabe als Event-Objekt
– Events nur Void-Delegates (ohne Rückgabe)
• Sender wird übergeben
– Wiederverwendbarkeit der Handler-Methoden
Einführung in .NET und C# - Georg Hinkel
25. 25
Events – Konventionen (2)
• Standarddelegates für Events:
– Mit Parametern/Rückgabe
public delegate void EventHandler<T as EventArgs>(object sender, T event)
public event EventHandler<ResolveEntityEventArgs> ResolveEntityRequired;
Manchmal noch alter Code ohne Generizität
– Ohne Parameter
public delegate void EventHandler(object sender, EventArgs event)
public event EventHandler PropertyChanged;
Einführung in .NET und C# - Georg Hinkel
26. 26
Events - Anwendungen
• Oberflächen
– Windows Forms Button: 72 Events
– WPF Button: 95 Events
• MVC/MVP/MVVM
– Saubere Implementierung des Observer-Patterns
Einführung in .NET und C# - Georg Hinkel
27. 27
Best Practise (1)
• Properties + Observer
private string _name;
public string Name {
get {
return _name;
}
set {
if (_name != value) {
_name = value;
OnNameChanged(EventArgs.Empty);
}
}
}
Einführung in .NET und C# - Georg Hinkel
28. 28
Best Practise (2)
• Properties + Observer
protected virtual void OnNameChanged(EventArgs e)
{
EventHandler handler = NameChanged;
if (handler != null)
{
handler.Invoke(this, e);
}
}
public event EventHandler NameChanged;
Einführung in .NET und C# - Georg Hinkel
29. 29
Best Practise (2)
• Properties + Observer
protected virtual void OnNameChanged(EventArgs e)
{
EventHandler handler = NameChanged;
if (handler != null)
{
handler(this, e);
}
}
public event EventHandler NameChanged;
Einführung in .NET und C# - Georg Hinkel
31. 31
Werttypen, Referenztypen
• Java: int, double, … primitive Typen
– Keine Objekte
– Verstoß gegen Objektorientierung!
• .NET: Trennung Werttypen vs. Referenztypen
– Vollständig objektorientiert
– Automatisches Boxing/Unboxing
Einführung in .NET und C# - Georg Hinkel
32. 32
Referenztypen
• Zugriff nur über Referenz
• Eigentliches Objekt im Heap gespeichert
• Variablen sind nur Zeiger
„normale Objekte“
Einführung in .NET und C# - Georg Hinkel
33. 33
Werttypen (1)
• Overhead für kleine Objekte zu hoch
• Speicherung der Objekte „vor Ort“ im Stack
– Boxing/Unboxing
– Kein Zusätzlicher Speicherplatz notwendig (meist)
– Werttypen sind immutable (unveränderlich)
– Vererbung nicht möglich
Einführung in .NET und C# - Georg Hinkel
34. 34
Werttypen (2)
• Definition eigener Werttypen möglich
– Enumerationen: Definition mehrerer thematisch
ähnlicher numerischer Konstanten
– Structure: Wie Klassen, aber ohne Polymorphie
• Structure erbt automatisch von ValueType
• Implementierung von Schnittstellen trotzdem möglich
• GetHashCode sollte überschrieben werden
Einführung in .NET und C# - Georg Hinkel
35. 35
Werttypen - Beispiel
• Structure Point (System.Drawing.Point)
Point p = window.Location;
p.X += 20;
Was passiert? Was wäre, wenn Point eine
Referenzklasse wäre (Reference Type)?
Einführung in .NET und C# - Georg Hinkel
36. 36
Werttypen - Beispiel
• Structure Point (System.Drawing.Point)
Point p = window.Location;
p.X += 20;
window.Location = p;
Was passiert? Was wäre, wenn Point eine
Referenzklasse wäre (Reference Type)?
Einführung in .NET und C# - Georg Hinkel
37. 37
Enumerationen – Syntax in C#
/// <summary>
/// Defines the gender of a patient
/// </summary>
public enum Gender
{
Male,
Female,
Unknown
}
Einführung in .NET und C# - Georg Hinkel
38. 38
Enumerationen – Syntax in C#
/// <summary>
/// Defines the gender of a patient
/// </summary>
public enum Gender : byte
{
Male ,
Female,
Unknown
}
Einführung in .NET und C# - Georg Hinkel
39. 39
Enumerationen – Syntax in C#
/// <summary>
/// Defines the gender of a patient
/// </summary>
[Flagged]
public enum Gender : byte
{
Male = 2,
Female = 4,
Unknown = 1
}
Einführung in .NET und C# - Georg Hinkel
41. Vielen Dank für eure Aufmerksamkeit!
Präsentation von:
Georg Hinkel
Microsoft Student Partner
KIT Karlsruhe
georg.hinkel@studentpartners.de
42. 42
IT 4 Students
Der Newsletter rund um Microsoft Angebote für Studierende
Online:
www.microsoft.de/dreamspark
Einführung in .NET und C# - Georg Hinkel
43. 43
/TechStudent Online
Facebook
– das Portal für Geeks, Nerds und www.facebook.com/
alle, die es noch werden wollen techstudentgermany
www.microsoft.de/techstuden
t
Einführung in .NET und C# - Georg Hinkel
44. 44
MSDN AA
MSDN AA = Microsoft Developer Network – Academic Alliance
Entwicklungsumgebungen, Datenbanken, Betriebssysteme
wie … Windows 7, Visio, Project, Visual Studio
Ausstattung der angebotenen Software für alle
immatrikulierten Studierenden und die
Lehreinrichtung
Online: www.msdnaa.de
Einführung in .NET und C# - Georg Hinkel
45. 45
DreamSpark
Kostenloser Softwaredownload für alle Studierenden
SDK, Visual Studio, Virtual PC, SQL Server und Co.
Online:
www.microsoft.de/dreamspark
Einführung in .NET und C# - Georg Hinkel