Moderne Programmierung mit Visual Studio 2012

Florian Rappl, Universität Regensburg

C# und VS 2012:
Moderne Programmierung

Agenda

  1. 09:00 - 10:30 Vortrag (Erster Teil)
  2. 10:30 - 10:45 Pause
  3. 10:45 - 12:00 Vortrag (Zweiter Teil)
  4. 12:00 - 13:00 Mittagspause
  5. 13:00 - 16:00 Übungen
  6. 16:00 - 17:00 Offener Teil

Bitte Fragen direkt einbringen und bei Verständnisproblemen sofort nachfassen.

Was zeichnet C# aus?

  • Garbage Collection
  • Heap und Stack
  • Generics (Klassen, Methoden)
  • Erweiterungsmethoden
  • CLR und DLR
  • object, var und dynamic
  • Reflection

→ 01 - Wiederholung

Asynchrone Methoden mit C# 5

  • Neue Schlüsselwörter: async und await
  • async markiert asynchrone Methoden
  • await wandelt die Rückgabe von Task<T> in T um
  • Letzteres wartet in neuem Thread auf Rückgabe
  • Weiterführung in eigentlichem (UI) Thread
  • Vermeidet daher Cross-Threading-Exceptions

Notwendiges Vokabular

Async definitions Fork Join Master

Asynchrone Methoden mit .NET 4

  • Eigentlich wird .NET 4.5 benötigt
  • Grund: Einige neue Helferklassen wurden eingeführt
  • Allerdings kann man die Grenze bis auf .NET 4 herabsetzen
  • Lösung: Verwenden von Microsoft.CompilerServices.AsyncTargetingPack
  • Diese Bibliothek stellt die notwendigen Klassen bereit

Asynchrone Gotchas

  • Einige Probleme sind damit leichter zu handhaben
  • Nachteil: Code läuft in neuem Thread ab
  • Das heißt: Callbacks aus Thread vermeiden
  • Für WPF: Ereignisse daraus nur mit Dispatcher
  • Ansonsten empfehlen sich die Reactive Extensions

→ 02 - Dispatching

Lambda Expressions!

  • Ersetzen anonymone Funktionen (sauberer!)
  • Können auf mehrere Arten eingesetzt werden:
    • Anonyme Funktion (Compiler erstellt Methode)
    • Closure (Compiler erstellt Klasse mit Members)
    • Expression, d.h. wir erhalten den Tree
  • Geben uns jede Menge neuer Möglichkeiten
  • Ermöglichen funktionale Programmierung

Einsatz von Lambdas

  • Helper von ASP.NET MVC
  • LINQ
  • Reactive Extensions
  • Callbacks
  • Projektionen
  • Verzögerte Ausführung

→ 03 - Lambda Expressions

LINQ

  • Unterschied: IQueryable und IEnumerable
  • Übergabe von Callbacks zur Durchführung von Abfragen
  • Unterschied: Query Syntax und Erweiterungsmethoden
  • Verzögerte Ausführung
  • Vorsicht beim Verwenden von leeren Listen
  • Vorsicht mit First(), Last() uvm.
  • Lieber FirstOrDefault() etc. verwenden

Abfragen mit LINQ

  • Aggregatoperationen z.B. Sum()
  • Projektionsoperationen z.B. Select()
  • Ordnungsoperationen z.B. OrderBy()
  • Listenoperationen z.B. ToArray()
  • Elementoperationen (z.B. First())
  • Gruppieren mit GroupBy()
  • Mengenoperationen, z.B. Intersect()
  • ... und viele weitere

Operatenklassen

LINQ operator classes

→ 04 - LINQ

PLINQ

  • (Implizite) parallele Abfagen
  • Nutzt die Task Parallel Library aus
  • Wichtig ist die ext. Methode AsParallel()
  • Leicht abzubrechen mit WithCancellation()
  • Rückkehr über AsSequential()

Einordnung von PLINQ

Tasks and Threads

→ 05 - PLINQ

Unsere IDE: Visual Studio (2012)

  • Siebte Ausgabe des Visual Studios (Erste: VS 97)
  • Komplett neues UI Konzept
  • Tool für Web-, Client- und Serverentwicklung
  • Weitere Projekte (WP, iOS, Android, ...) möglich
  • Unterstützung zahlreicher Sprachen (C#, F#, VB, C/C++ sofort)
  • Erweiterte SQL Features
  • Verbesserte Web-Tools

Features des Visual Studios

  • Intellisense
  • Stand-alone Editor
  • Plugins (leicht erweiterbar)
  • Projektverwaltung und VCS integriert
  • Integrierte Unit-Tests
  • SQL Management
  • Integriertes Buildsystem

Debugging

  • Step Into, Step Over, Step Out
  • Conditional Debugging
  • Debug Output (Statische Klasse Debug)
  • Oder (auch für Release) mit Trace
  • Überwachung von Variablen
  • Performance Analyse
  • An Prozess anhängen

Weitere Debugging Tools

  • Variablen: Locals, Autos, Watches
  • Immediate Window zur Interaktion
  • Object-ID
  • Call Stack
  • Breakpoints importieren / exportieren
  • Breakpoints benennen und Macros ausführen
  • Threads
  • IntelliTrace (historisches Debuggen)

Präprozessor / Bedingungen

  • In C# gibts nach wie vor einen Präprozessor
  • Standardmäßig wird im Debug Modus das Symbol DEBUG definiert
  • Dies kann man ausnutzen über
    #if DEBUG
    	// Code hier platzieren
    #endif
    
  • Für Methoden: [Conditional("DEBUG")] verwenden
  • Eigene Symbole über die Projekteigenschaften festlegen

→ 06 - Debugging

Remote Debugging

  • Debugging von laufenden Anwendungen
  • Verbindung zu anderen Computern
  • Verbindung zu virtuellen Maschinen
  • Mit Windows Store Anwendungen: Simulator

Wie funktionierts?

  • Mehrere Möglichkeiten, z.B. an Prozess anhängen
  • Beste Möglichkeit: Direkt von der Projektmappe aus
  • In Projekteigenschaften einstellen
  • Auf Remotemaschine installieren / kopieren
  • Wichtig: Auch pdb Dateien übertragen
  • Rechte einstellen (oder NoAuthentication benutzen)
  • (Evtl.) Sicherheitsrichtlinien anpassen (/noguestonlywarn)

→ 07 - Remote Debugging

Visual Studio und WPF

  • Integrierter Designer
  • Viele Vorlagen
  • Verbessertes Debugging mit int. XAML Debugger
  • Silverlight, Windows Store Anwendungen etc.
  • Ab 2012: Expression Blend als Programm dabei

WPF (XAML)

  • XML basierte Beschreibungssprache für CLR Anwendungen
  • Tags entsprechen Instanzen von Objekten
  • Attribute entsprechen Eigenschaften
  • Führt das Konzept von geräteunabhängigen Pixeln ein
  • Rendering geht (teilweise) über DirectX
  • Strikte (XML) Syntax mit einem Stammelement
  • Steuerelemente haben keine Zeichenlogik (Lookless)

Noch mehr über XAML

  • Hierarchischer Aufbau
  • Container (Layouts) sind sehr wichtig (z.B. Canvas oder Grid)
  • Verschiedene Implementierungen existieren
  • XAML wird in BAML umgewandelt und zur Laufzeit geladen
  • XAML präsentiert den Logical Tree
  • Der Visual Tree ist die Erweiterung des Logical Trees
  • Styling wird ebenfalls in XAML definiert

Ressourcen und Styling

  • Statische und Dynamische Ressourcen
  • Benannte Styles oder Verwendung von TargetType
  • Wichtig: Trigger, Templates und Storyboards
  • Unterschied Eigenschaften-, Ereignis- und Daten-Trigger
  • Vererbung von Styles über BasedOn
  • Zeichenlogik der Controls über Templates

Wichtig zu wissen

  • Zusätzliche Einschränkungen zu den strikten XML Regeln
  • Prinzipiell kann jedes Element der Root sein:
    <Button xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
    	Ich bin ein Button!
    </Button>
    
  • StartupUri in App.xaml legt das Startfenster fest
  • WPF verfügt über eine eingebaute 3D Engine (→ Viewport3D)
  • XAML ist extrem leicht auslesbar

Unterscheidung: Logical und Visual Tree

XAML Logical Visual Tree

→ 08 - XAML

WPF Design Patterns - MVVM

  • Ein Vorteil von WPF ist das integrierte Binding
  • Daraus ist das MVVM Designmuster entstanden
  • Vorteil: Bessere Trennung UI und Logik
  • Weiterer Vorteil: Testbarkeit der Logik
  • Nachteil: Komplexere Szenarien sind schwer umsetzbar

MVVM Schema

MVVM Diagram Schema

MVVM Grundlagen

  • Brauchen UI Element (View), z.B. Window, Control, ...
  • Brauchen Datenquelle (Model), z.B. Datenbank, XML Datei, ...
  • Und die Verbindung über ein ViewModel
  • VM implementiert Interface INofifyPropertyChanged
  • VM gibt Daten aus dem Model inkl. Logic frei
  • In XAML über Binding Deklaration als Attributswert

MVVM Details

  • Dependency Properties
  • Eigene Controls über Templates
  • Verwenden von DataContext
  • ObservableCollection<T> ausnutzen
  • Binding Mode setzen (OneWay, TwoWay)
  • Ausnutzen des propdp Snippets

→ 09 - WPF mit MVVM

Noch mehr WPF!

  • Attached properties (propa Snippet)
  • Data Template Selectors
  • Separation of Concerns
  • Design Time Values
  • Type Converters
  • ... und noch vieles mehr!

Packete verwalten mit NuGet

  • NuGet ist ein Plugin für VS (bereits integriert)
  • Ziel: Erleichterung von Packetinstallation und -wartung
  • Vorteil: Keine Suche nach Abhängigkeiten mehr notwendig
  • Außerdem: Keine Suche nach Updates nötig (automatisch!)
  • Können auch (lokale / private) Feeds aufsetzen

Aufbau von NuGet

Nuget handling overview

Wie geht's weiter?

  • SQL und NoSQL Datenbanken
  • Webtechnologien (ASP.NET)
  • Performance Optimization
  • Software Design Patterns
  • Test-Driven-Development
  • Agile Development

Viel Erfolg!

MVP

Florian Rappl, Universität Regensburg