45
Präsentation von: Einführung in C# Georg Hinkel Microsoft Student Partner KIT Karlsruhe [email protected]

Einführung in .NET mit C#

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Einführung in .NET mit C#

Präsentation von:

Einführung in C#

Georg Hinkel

Microsoft Student Partner

KIT Karlsruhe

[email protected]

Page 2: Einführung in .NET mit C#

Agenda

• .NET Architektur, Terminologie

• Syntax C#

– Kontrollstrukturen, Namenskonventionen

– Properties

– Delegates, Events

• Werttypen vs. Referenztypen

Einführung in .NET und C# - Georg Hinkel

2

Page 3: Einführung in .NET mit C#

Architektur & Terminologie Grober Aufbau der Plattform und Klärung der Begriffe

Page 4: Einführung in .NET mit C#

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

Page 5: Einführung in .NET mit C#

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

Page 6: Einführung in .NET mit C#

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

Page 7: Einführung in .NET mit C#

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

Page 8: Einführung in .NET mit C#

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

Page 9: Einführung in .NET mit C#

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

Page 10: Einführung in .NET mit C#

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

Page 11: Einführung in .NET mit C#

Zusammenfassung

• Grobe Architektur ähnlich Java

• Sprachvielfalt

11

Einführung in .NET und C# - Georg Hinkel

Page 12: Einführung in .NET mit C#

Syntax C# Syntax, Properties, Delegates, Generics, ValueTypes, Structs

Page 13: Einführung in .NET mit C#

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

Page 14: Einführung in .NET mit C#

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

Page 15: Einführung in .NET mit C#

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

Page 16: Einführung in .NET mit C#

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

Page 17: Einführung in .NET mit C#

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

Page 18: Einführung in .NET mit C#

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

Page 19: Einführung in .NET mit C#

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

Page 20: Einführung in .NET mit C#

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

Page 21: Einführung in .NET mit C#

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

Page 22: Einführung in .NET mit C#

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

Page 23: Einführung in .NET mit C#

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

Page 24: Einführung in .NET mit C#

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

Page 25: Einführung in .NET mit C#

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

Page 26: Einführung in .NET mit C#

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

Page 27: Einführung in .NET mit C#

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

Page 28: Einführung in .NET mit C#

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

Page 29: Einführung in .NET mit C#

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

Page 30: Einführung in .NET mit C#

Werttypen, Referenztypen

Page 31: Einführung in .NET mit C#

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

Page 32: Einführung in .NET mit C#

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

Page 33: Einführung in .NET mit C#

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

Page 34: Einführung in .NET mit C#

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

Page 35: Einführung in .NET mit C#

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

Page 36: Einführung in .NET mit C#

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

Page 37: Einführung in .NET mit C#

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

Page 38: Einführung in .NET mit C#

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

Page 39: Einführung in .NET mit C#

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

Page 40: Einführung in .NET mit C#

Demo Lemming-Ameisen

Page 41: Einführung in .NET mit C#

Präsentation von:

Vielen Dank für eure Aufmerksamkeit!

Georg Hinkel

Microsoft Student Partner

KIT Karlsruhe

[email protected]

Page 42: Einführung in .NET mit C#

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

Page 43: Einführung in .NET mit C#

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

Page 44: Einführung in .NET mit C#

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

Page 45: Einführung in .NET mit C#

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