Upload
mspgermany
View
1.949
Download
4
Embed Size (px)
DESCRIPTION
Citation preview
Präsentation von:
Einführung in C#
Georg Hinkel
Microsoft Student Partner
KIT Karlsruhe
Agenda
• .NET Architektur, Terminologie
• Syntax C#
– Kontrollstrukturen, Namenskonventionen
– Properties
– Delegates, Events
• Werttypen vs. Referenztypen
Einführung in .NET und C# - Georg Hinkel
2
Architektur & Terminologie Grober Aufbau der Plattform und Klärung der Begriffe
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)
4
Einführung in .NET und C# - Georg Hinkel
Bildquelle: Wikipedia
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)
5
Einführung in .NET und C# - Georg Hinkel
Intermediate Language
• Stackbasierter Bytecode
• Aus den fertigen Kompilaten direkt ablesbar
– Mit Spezialprogrammen (.NET Reflector) Quellcode rekonstruierbar
– Techniken um Rekonstruktion des Quellcodes zu verhindern notwendig
6
Einführung in .NET und C# - Georg Hinkel
Common Language Runtime (CLR)
• Virtuelle Maschine mit Laufzeitumgebung
– Dadurch plattformunabhängig
– CLR nur für Windows erhältlich
– Mono Projekt: CLR für Linux
7
Einführung in .NET und C# - Georg Hinkel
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
8
Einführung in .NET und C# - Georg Hinkel
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
9
Einführung in .NET und C# - Georg Hinkel
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 – Entwickelt am IPD/Uni Karlsruhe
• Boo, J#, Jscript.NET, Clarion.NET u.v.m
• …etwa 10-20 weitere
„The language doesn‘t matter“ Dan Appleman
10
Einführung in .NET und C# - Georg Hinkel
Zusammenfassung
• Grobe Architektur ähnlich Java
• Sprachvielfalt
11
Einführung in .NET und C# - Georg Hinkel
Syntax C# Syntax, Properties, Delegates, Generics, ValueTypes, Structs
Klassen
• Hier kein Grundkurs der Objektorientierung (Zeit!)
• Literatur: Galileo Openbook
– http://openbook.galileocomputing.de/visual_csharp_2010/
– http://openbook.galileocomputing.de/oop/
13
Einführung in .NET und C# - Georg Hinkel
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;
}
}
14
Einführung in .NET und C# - Georg Hinkel
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;
} }
Klassenname
Basisklasse Schnittstelle
Methodendefinition Property
15
Einführung in .NET und C# - Georg Hinkel
Kontrollstrukturen
• Bedingte einfache Sprünge
– if-Anweisung
• Schleifen
– do/while-Schleifen
– for-Schleifen
• Iterierte Schleifen mit foreach
• LINQ
16
Einführung in .NET und C# - Georg Hinkel
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
17
Einführung in .NET und C# - Georg Hinkel
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
18
Einführung in .NET und C# - Georg Hinkel
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; }
19
Einführung in .NET und C# - Georg Hinkel
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
20
Einführung in .NET und C# - Georg Hinkel
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
21
Einführung in .NET und C# - Georg Hinkel
Delegates • Ähnlich Funktionszeigern in C, nur mit Objekt
• Ein Delegate ist eine Klasse, also ein Datentyp
• Verketten und Herauslösen möglich (e.g. Methode Delegate.Combine)
• Bestandteil der CLS
public delegate void Foovoid()
22
Einführung in .NET und C# - Georg Hinkel
Events
• Ähnlich Klassenvariable, aber es sind nach außen nur die Operationen Verketten und Herauslösen möglich
• Bestandteil der CLS
• Faktisch in der Sprache implementiertes Observer-Pattern („Beobachtermuster“)
public event Foovoid FooHappened;
23
Einführung in .NET und C# - Georg Hinkel
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
24
Einführung in .NET und C# - Georg Hinkel
Events – Konventionen (2)
• Standarddelegates für Events:
– Mit Parametern/Rückgabe
Manchmal noch alter Code ohne Generizität
– Ohne Parameter
public delegate void EventHandler<T as EventArgs>(object sender, T event) public event EventHandler<ResolveEntityEventArgs> ResolveEntityRequired;
public delegate void EventHandler(object sender, EventArgs event) public event EventHandler PropertyChanged;
25
Einführung in .NET und C# - Georg Hinkel
Events - Anwendungen
• Oberflächen
– Windows Forms Button: 72 Events
– WPF Button: 95 Events
• MVC/MVP/MVVM
– Saubere Implementierung des Observer-Patterns
26
Einführung in .NET und C# - Georg Hinkel
Best Practise (1) • Properties + Observer
private string _name; public string Name { get { return _name; } set { if (_name != value) { _name = value; OnNameChanged(EventArgs.Empty); } } }
27
Einführung in .NET und C# - Georg Hinkel
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;
28
Einführung in .NET und C# - Georg Hinkel
Best Practise (2) • Properties + Observer
protected virtual void OnNameChanged(EventArgs e) { EventHandler handler = NameChanged; if (handler != null) { handler(this, e); } } public event EventHandler NameChanged;
29
Einführung in .NET und C# - Georg Hinkel
Werttypen, Referenztypen
Werttypen, Referenztypen
• Java: int, double, … primitive Typen
– Keine Objekte
– Verstoß gegen Objektorientierung!
• .NET: Trennung Werttypen vs. Referenztypen
– Vollständig objektorientiert
– Automatisches Boxing/Unboxing
31
Einführung in .NET und C# - Georg Hinkel
Referenztypen
• Zugriff nur über Referenz
• Eigentliches Objekt im Heap gespeichert
• Variablen sind nur Zeiger
„normale Objekte“
32
Einführung in .NET und C# - Georg Hinkel
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
33
Einführung in .NET und C# - Georg Hinkel
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
34
Einführung in .NET und C# - Georg Hinkel
Werttypen - Beispiel • Structure Point (System.Drawing.Point)
Was passiert? Was wäre, wenn Point eine Referenzklasse wäre (Reference Type)?
Point p = window.Location; p.X += 20;
35
Einführung in .NET und C# - Georg Hinkel
Werttypen - Beispiel • Structure Point (System.Drawing.Point)
Was passiert? Was wäre, wenn Point eine Referenzklasse wäre (Reference Type)?
Point p = window.Location; p.X += 20; window.Location = p;
36
Einführung in .NET und C# - Georg Hinkel
Enumerationen – Syntax in C#
/// <summary>
/// Defines the gender of a patient
/// </summary>
public enum Gender
{
Male,
Female,
Unknown
}
37
Einführung in .NET und C# - Georg Hinkel
Enumerationen – Syntax in C#
/// <summary>
/// Defines the gender of a patient
/// </summary>
public enum Gender : byte
{
Male ,
Female,
Unknown
}
38
Einführung in .NET und C# - Georg Hinkel
Enumerationen – Syntax in C#
/// <summary>
/// Defines the gender of a patient
/// </summary>
[Flagged]
public enum Gender : byte
{
Male = 2,
Female = 4,
Unknown = 1
}
39
Einführung in .NET und C# - Georg Hinkel
Demo Lemming-Ameisen
Präsentation von:
Vielen Dank für eure Aufmerksamkeit!
Georg Hinkel
Microsoft Student Partner
KIT Karlsruhe
IT 4 Students
Der Newsletter rund um Microsoft Angebote für Studierende
Online:
www.microsoft.de/dreamspark
42
Einführung in .NET und C# - Georg Hinkel
Online /TechStudent – das Portal für Geeks, Nerds und alle, die es noch werden wollen
www.microsoft.de/techstudent
Facebook www.facebook.com/ techstudentgermany
43
Einführung in .NET und C# - Georg Hinkel
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
44
Einführung in .NET und C# - Georg Hinkel
DreamSpark
Kostenloser Softwaredownload für alle Studierenden
SDK, Visual Studio, Virtual PC, SQL Server und Co.
Online:
www.microsoft.de/dreamspark
45
Einführung in .NET und C# - Georg Hinkel