C# Einführung
Ziele
- .NET Überblick
- Aufbau von .NET-Programmen
- Überblick über die Standarddatentypen
- Operatoren
- Kontrollstrukturen
- Klassen
- Vererbung
- Strukturen
- Ausnahmebehandlung (Exceptions)
- Ereignisse und Delegates
- Collections
- Assemblies
- Ausblick: Windows-Forms
- Übungen
Grundlagen .NET 4.5
-
NET Überblick, Historie, Versionen
NET 4.6 mit SIMD- Support - CLR und ihre Dienste (GC, AppDomains, Security etc.)
- Assemblies: DLL und EXE
- Private Assemblies und Global Assembly Cache
- Signierung
Softwareentwicklung mit Visual Studio 2013/15
-
Projektmappe und Projekte
- Agile Softwareentwicklung und die Bedeutung der Modularisierung
- Abbildung der Schichten auf Projekte
- Testprojekte
- Beispielprojekt Vectoralgebra
- Projekttypen: Klassenbibliothek, Testprojekt, Winform
- Fenster Eigenschaften, Projektmappenexplorer, Klassenansicht, Klassendiagramm
- Codesnippets
Nuget Package Manager
- Einführung in die Verwaltung von Abhängigkeiten zwischen Bibliotheken
- Installation der Beispielbibliothek in der Projektmappe mit den Übungen
C# Syntax und Programmkonstrukte
-
Compiler und Präprozessor
- Bedingtes Kompilieren
- Debug- und Trace- Klasse, mit Tracefiles Laufzeitfehler lokalisieren
- Literale, Ausdrücke, Operatoren und Anweisungen
- Blöcke
-
Variablen
- Elementare Datentypen
- Deklaration, Initialisierung und Typinferenz
- Übung: Klasse Konto um statischen Instancecounter erweitern
- Aufzählungstypen
- Konvertierung und Konvertierungsoperatoren
-
Anweisungsblöcke
- Verzweigungen
- Schleifen
- Funktions- und Unterprogrammblöcke
- Parameterliste und Arten der Parameterübergabe
-
Datenstrukturen
- Geschäftsobjekte als Komposition elementarer Daten
- Vordefinierte Datenstruktur DateTime
struct
- Blöcke- Instanziierung, Initialisierung mittels Konstruktor
- Geschäftslogik in Methoden implementieren
- Grenzen von Wertetypen
-
Referenztypen
- Objekte mit dynamischen Speicherplatzanforderungen als Referenztypinstanzen
- Vordefinierte Referenztypen
- Eigene Referenztypen mittels class block deklarieren
- Boxing/Unboxing von Werte in Referenztypen
-
Arrays
- Ein- und mehrdimensionale Arrays
- Parameterarrays
- Sortieren mittels Array- Sort
- Problem mit selbstdefinierten Typen
- Chars und Strings
- Generische Typen
- Motivation zur generischen Programmierung: Sortiere „Äpfel und Birnen“
- Vordefiniere generische Typen
Collections und Schnittstellen
- Schnittstellen
- Wie Schnittstellen in .NET Mengenkonzepte abbilden → Schnittstellenvererbung als Abstraktionskonzept
- Implementieren von IEnumarable in PrimList
- Bsp: ArrayInt und ArrayGenerisch<T>
-
Indexer
- ForEach und IEnumerable
- Collections im .NET Framework (ArrayList, Dictionary)
Objekt- funktionales Programmieren und LINQ
-
Einsprungadressen mittels Delegates verwalten
- Die vordefinierten generischen Typfamile Func<...> und Actions<...>
- Einsprungadressen speichern, aufrufen, entfernen aus einer Delegate- Variablen
- Lambda- Ausdrücke: Funktionen inline deklarieren
-
Listenverarbeitung mit Lambda und LINQ
- Allgemeine Listenoperationen wie Take, Skip, Concat
- Liste mit Preisen sortieren
- Liste mit Preisen Filtern
- Liste mit Preisen in $ umrechnen
-
Zugriff auf Datenbanken mittels Linq
- Entiy Framework
- Installation von Kepler-DB
- Objektrelationalen Mapper mittels Entity- Framework einrichten
- Zugriff auf Tabellen mittels Linq
Klassen, Vererbung und Polymorphismus
- Klassenbildung über Objektmengen
- Innerer Zustand, Eigenschaften und Methoden
-
Lebenszyklus, Konstruktoren, Dispose und Destruktor
- Objektinitialisierer und annonyme Typen
- Dispose- Schnittstelle
- Dispose manuell und in using Block
- Zugriffsmodifikatoren : z.B. public vs. internal (siehe CSharp45.Basics/ _04_Objektorientiert/ Astro/ inMem/ Konstruktoren von Galaxie, Stern)
-
Vererbung als Abstraktionskonzept und als Konzept zur Wiederverwendung
von Code
- Klasse Himmeslkörper als Verallgemeinerung von Galaxie und Stern (Basics._04_Objektorientiert.Astro)
- Mengen von Sterne, Galaxien und Planeten als Arrays von Himmelskörpern
- Verallgemeinern der Masseberechnung von Himmelskörpern dank virtuelle Methoden → Begriffsbildung "abstrakte Klasse"
-
new vs. override (Bsp. Auto.tanken und Auto.tanken_polymorph)
Anwendung: Implementieren eines Verzeichnisscanners nach dem Desing- Pattern der template method: DirTree - Events mittels Delegates implementieren (Stoppuhr, DirTree, LogServer)
Fehlerbehandlung
- Strukturierte Fehlerbehandlung mittels Try .. Catch
- Fehlerklassen
- ThrowIf...() Funktionen
Multithreading und asynchrone Programmierung
- Grundlagen
- Methoden mit Threads aus dem Threadpool via Delegate starten
- Vorteile des Threadpools
- Nachteile der direkten Nutzung von Threads zwecks Vollauslastung des Rechners
- Vollauslastung mittels TPL (Task Parallel Library) erreichen
- Asynchrone Methoden mittels async/await
GUI mit Windows Form
- Ausrichten von Steuerelementen mittels Format\Ausrichten …
- Anwendungseinstellungen
- Ressourcen
- Globalisierung
-
Forms von selbstdefinierten Vorlagen ableiten
- Vererbungsbeziehungen und Kapselung
- WinFormTemplate in Klassenbibliothek umwandeln
- Neue Form, die von einem Formular erbt, anlegen
- Veröffentlichen
Einführung in die Winform- Steuerelemente- Bibliothek
-
Basisklasse Control und ihre Eigenschaften und Methoden
- Durch Control.Visible alle Steuerelemente innerhalb eines Panels gleichzeitig verschwinden lassen
- Steuerelemente zur Laufzeit hinzufügen
- Benutzereingaben validieren
-
Streifzug durch die Bibliothek der Winform- Steuerelemente
- Buttons: Starten von Anwendungslogik
- TabControl, Panel, etc.: Steuerelemente organisieren
- TextBox und TextBoxBase
- Texteditor mit Clippboard- Funktion implementieren
-
Listboxen und ComboBox
- Binden mittels BindingSource von Listbox an Array mit ColorItem- Objekten
- Klassenhierarchie von Kaffezusatz (Milch, Zucker, Chili, …)
- Objekte der Klassenhierarchie über ComboBox auswählen
-
Treeview
- Statische TreeView Solarsystem (ImageList mit Bildern für Knoten)
- TreeView dynamisch aufbauen beim Rekursiven Durchlauf durch ein Dateiverzeichnis (Filesystem)
- Vordefinierter Dialog FolderBrowserDialog zum auswählen eines Verzeichnisses
-
Selbstdefinierte Dialoge
- Definieren von Rückgabewerten in modalen Dialogen
-
Zugriff auf den inneren Zustand von Dialogen mittels Properties
- Beispiel Kaffeautomat: Schnittstelle Icoffe wird implementiert durch Dialog und Klasse CoffeeOrder
- CoffeeOrder Objekt kann aus Daten des Dialoges mittels speziellen New- Konstruktor instanziiert werden
- CoffeeOrder Objekt serialisieren in xml und speichern auf Festplatte
- CoffeeOrder Objekt aus Datei durch deserialisieren wiederherstellen
-
Selbstdefinierte Steuerelemente
- Bestehende Steuerelemente erweitern oder neue Steuerelemente erstellen
- IntBox: Steuerelement zum definieren eines benannten Eingabefeldes für Integer
- Entwurfszeitunterstützung mittels der System.ComponentModel- Attribute Browsable und Category
- Eigenschaften Caption und Value implementieren