Thematik
Die Programmiersprache C# oder VB.NET ist eine der
Basissprachen für die
Entwicklung von
.NET-Anwendungen.
Die Sprache integriert die neuen
Konzepte und
Technologien und eröffnet damit neue Möglichkeiten.
Für wen ?
Dieser Kurs richtet sich an Entwickler,
die noch wenig Erfahrung
mit
Programmiersprachen haben.
Das
sollten Sie mitbringen !
Programmier Kenntnisse in einer
höheren Programmiersprache.
Was
bringt es Ihnen ?
Neben einer Einführung
in C# und Visual Studio 2008 lernen sie auch .NET
Technologien wie ADO.NET, Windows Forms, und
WebServices kennen.
Dauer 5 Tage
Der Kurs wird wunschgemäß in C# oder VB.NET gehalten
Was bietet uns die IDE ? Eine einzige
Oberfläche für alle Projekte.
Innerhalb einer Solution sind Projekte in
unterschiedlichen Programmiersprachen möglich.
Aussehen der IDE und ShortCuts der Tastaturprofile können angepasst werden.
Ein integrierter Internetbrowser ist vorhanden. Features wie die dynamische
Hilfe,
der Objekt-Browser etc.
Welche Projekte können erstellt werden ?
Der Server Explorer ermöglicht den Zugriff auf Server - Ressourcen wie
EventLogs
und Services. Problemloser Zugriff auf den SQL Server, ein
Umschalten zum
SQL-Enterprise-Manager ist nicht mehr erforderlich.
Welche
Möglichkeiten zum Debuggen stehen zur Verfügung ?
CTS, ein
gemeinsames Typsystem für alle
Sprachen, die Basis für das
Sprachübergreifende
Programmieren.
Alle Typen in .Net sind
Objekte, auch einfache Typen wie short oder int.
Diese Objekte werden aber als Wert-Typen auf dem Stack
und nicht auf dem
Heap
angelegt.
Enums gehören
ebenfalls dazu, sie können durch beliebige Typen implementiert
werden,
außer durch char.
Namensgebung:
Pascal und camelCasing, wo bleibt die wirklich
sinnvolle
ungarische Notation
?
Scope : Eine Variable in einem Block darf im
umschließenden Eltern Bock
nicht erneut
definiert werden.
Bedingte Anweisungen: "if" und "else"
.
"switch-case" vermeidet lange
"else-if" Ketten. Als Konstanten sind die folgenden
Typen möglich
:int, char, enum und string und implizit konvertierbare.
Es ist kein "Fall Through" erlaubt,
dafür gibt es das "goto", aber bitte nur dafür !
Es
gibt 4 Anweisungen für Schleifen: " while", "do", "for" und
"foreach".
Es gibt auch noch "break" und "continue"
Die Größe des Arrays ist nicht Bestandteil des
Arrays.
Arrays werden immer mit "new" angelegt, auch wenn man
es nicht so schreibt.
Arrays sind
Objekte in .Net, sie werden auf dem Heap angelegt.
Arrays haben Methoden.
Mehrdimensionale Arrays.
Der Zugriff bei Arrays
erfolgt über den Index.
Nützlich: das Length Property und die GetLength
Methode.
Wie
übergebe ich Arrays in Funktionen, wie greife ich darauf zu
?
Der Zugriff auf die Command-Line-Argumente.
Warum Exceptions ? Die Realisierung mit try /
catch.
Vorsicht! Exception Objekte sind nur
im Catch Block gültig.
Verschiedene Exception Klassen in
.Net.
Mehrfache Catch Blöcke : zuerst spezifische
Exceptions dann allgemeine
Exceptions abfangen. Abgeleitete Exception Klassen dürfen nicht hinter Basis
Klassen stehen.
Bitte Exceptions auch nur für
Ausnahmen verwenden, nicht für den normalen
Programmablauf !
Mit "throw" Exceptions
auslösen.
Überbegriffe bilden, "Klassifizieren" tun wir
ständig, warum nicht auch beim
Programmieren.
Die Klasse ist der Bauplan, das Programm
arbeitet letztendlich mit Objekten.
Wie finde
ich Klassen ? Durch Abstrahieren.
Warum ist Verkapselung so wichtig ? Wie
werde ich darin von C# unterstützt ?
Code wieder verwenden durch
Vererbung, sie stellt eine "Ist" - Beziehung dar.
Es gibt auch die "Hat" - Beziehung, die Aggregation
Eine Klasse kann in .Net Code nur von einer Klasse erben.
Über eine Objekt-Liste iterieren
und je nach Objekt-Typ reagieren - Der Polymorphismus,
ein Highlight von OOP.
Abstrakte Klassen liefern Code, fordern aber auch eine Implementierung.
Variable sollten grundsätzlich privat sein.
Für den Zugriff verwenden wir dann "public Propertys". Hierin kann
man auch den Zugriff
kontrollieren, sie bieten einen intuitiven
Zugriff.
Die beiden Zugriffs-Accessoren "get" und "set", wie
erfolgt der Zugriff ?
Wir können auch den Schreibzugriff
verbieten, das "ReadOnly" Property.
Objekte werden mit "new"
auf dem Stack angelegt. Was genau liegt auf dem Heap,
und was liegt
auf dem Stack ?
Das Initialisieren der Objekte erfolgt über
Konstruktoren.
Damit Objekte immer initialisiert sind, liefert uns
der Compiler einen
Default-Konstruktor, dieser ist unsichtbar
außer im ILDASM.
Was macht denn dieser Default-Konstruktor ? Warum ist
es oft sinnvoll, den vom
Compiler generierten
Default-Konstruktor ggf. zu überschreiben ?
Objekte sollten
vielfältig initialisiert werden können, die Funktionsüberladung
kommt
uns hier gerade recht - wir haben ja nur einen Namen, den
Klassennamen.
Mehrere Konstruktoren können redundanten Code
erzeugen, Abhilfe schafft die
Initialisierungsliste, mit der wir
innerhalb eines Konstruktors weitere Konstruktoren
aufrufen
können.
Enthält eine Klasse einen Konstruktor mit Parametern stellt
der Compiler keinen
Default-Konstruktor zur Verfügung, wird er
gebraucht, müssen wir ihn schreiben.
Konstruktoren können
keinen Wert zurückgeben, sie haben keinen Return Wert,
sie können aber
Exceptions werfen und die können wir abfangen.
Brauchen alle
Objekte einer Klasse die gleiche Information, reicht dafür eine
einzige
Variable für alle Objekte, die ist statisch,
dafür gibt es auch "static" Propertys.
Windows Frorms ist ein Framework um
Client-Anwendungen zu schreiben, die
die
grafische Oberfläche verwenden. Wir finden hier
ein durchgängiges
objektorientiertes Programmiermodell vor.
Unsere
erste Form ist mit dem
Notepad geschrieben.
Jede
Windows Forms Applikation besteht aus einer eigenen Klasse, abgeleitet
von System.Windows.Forms.Form und aus der Klasse
Application für die Message-Loop.
Die gleiche Anwendung mit Visual
Studio erstellt, welcher Code wird generiert,
was braucht Visual Studio
zusätzlich ?
Wie ist die generelle Vorgehensweise eine Form zu
erstellen ?
Welche
Controls stehen uns zur Verfügung ?
Windows Forms
ermöglicht dynamische Layouts, "Anchoring" und "Docking".
Ihre Verwendung ist intuitiv durch die Unterstützung
im Designer
Für die Menüs stehen 4 Klassen zu
Verfügung .
Wie werden diese zur Erstellung von Menüs verwendet ?
Die Common Dialog Boxen in .Net, ihre Verwendung ist einfach und
intuitiv.
Eigene Dialoge: Wie erhält
der Dialog Daten für die Anzeige, wie ist der Aufruf ?
Wie erhalte ich vom Dialog geänderte Daten
zurück ?
Platz sparend : Der Tabbed Dialog.
Die Toolbar in Windows Windows
Forms. Sie verwendet eine ImageList Klasse.
Zur Erstellung der Toolbar bekommen wir eine
sehr gute Unterstützung von
dem Designer in
Windows Forms. Interessant ist der Eventhandler : Es ist ganz
einfach
die Toolbar mit
vorhandenen Menüpunkten zu
synchronisieren.
Wir
erstellen auch eine Statusbar, zur Anzeige von Text und Zeit. Wie ist
die
Ansteuerung ?
Auch
für ComboBoxen gibt es Unterstützung vom Designer.
Datenbanken speichern ihre Informationen in Tabellen
ab.
Über die SQL Sprache kann leicht auf die Inhalte
zugegriffen werden.
Eine Tabelle enthält
Datensätze. Sie sind in den einzelnen Zeilen oder Reihen
abgebildet.
Ein Datensatz
besteht aus einer ID (dem Primary Key ) und verschiedenen Daten.
Theoretisch
könnten alle Daten in einer Tabelle abgespeichert sein,
performanter
ist es mit
mehreren Tabellen zu arbeiten, somit sind auch ganz einfach
Master-Detail
Beziehungen möglich
:
Die Master - Tabelle
erhält einen Bezug auf die Detail
- Tabelle in Form eines
Foreign Key (FK), dieser ist ein Primary Key in
der Detail Tabelle.
Die Verbindung erfolgt
über eine Relation, wir haben somit eine rationale
Datenbank.
Wir haben hier ein neues Konzept und keine
Weiterentwicklung von ADO
Es ermöglicht
skalierbare Anwendungen für Intranet und Internet.
Es gibt 2 Betriebsarten, den verbundenen Betrieb,
realisiert mit einem
clientseitigen Vorwärts-Lese-Cursor, dem
DataReader und dem nicht
verbundenen
Betrieb mit einer "InMemory" - Datenbank,
dem DataSet.
Anhand von
Anwendungs-Szenarien werden wir beide Betriebsarten behandeln.
Innerhalb des Visual Studio ist
es ganz einfach auf den SQL-Server zuzugreifen.
Das erspart ein ständiges
Wechseln vom Enterprise - Manager zum Visual Studio.
Für
unsere Arbeiten erstellen wir uns zunächst eigene Tabellen im Visual
Studio.
Der DataReader empfiehlt sich für Datenanzeige in List-
und ComboBoxen,
die Daten sollen nur
gelesen werden.
Welche Klassen sind im verbundenen Betrieb erforderlich ?
Welche Provider
stehen uns für die unterschiedlichen Datenbanken zur Verfügung ?
Möchte man neben der
Anzeige von Daten auch die Daten verändern und
rückwärts scrollen, dann bietet sich der DataSet an.
DataSets
enthalten neben Tabellen auch Constraints und Relationen und
ermöglichen auf diese Weise schon eine Vorabprüfung bei bestimmten
Veränderungen der Daten innerhalb des DataSets. Sie ersparen dadurch einen
fehlerhaften Zugriff auf
die Datenbank.
DataSets arbeiten völlig losgelöst von
ihrer Datenquelle, d.h. sie
müssen nicht ihre Daten immer
von Datenbanken beziehen. Andere Quellen sind
z.B.
XML - Files und Web-Services.
Wie arbeiten wir mit
einem DataSet ohne Datenbank ?
Welche Klassen haben wir
zur Verfügung um ein eigenes Schema zu erstellen ?
Der XSD-Designer, ein nützliches Tool. Darin erstellen wir unser Schema.
Wir
stellen Daten im DataSet mit Hilfe eines DataGrid dar, die Daten
werden
per Programm hinzugefügt.
Wie schreiben wir DataSets in XML-Files, welche Schreib-Modi
stehen zur Verfügung ?
Nachdem wir gesehen haben, wie ein DataSet
funktioniert, arbeiten wir mit dem
Data-Adapter-Wizard vom Visual Studio und
erzeugen mit minimalen Code eine
funktionierende
Anwendung.
Der Wizard erzeugt einen
Typed DataSet und den erforderlichen Code für den
DataAdapter.
Über den DataAdapter erfolgt der Query auf die
Datenbank.
Mit einem Befehl können wir auch Änderungen im DataSet
wieder in der Datenbank
speichern.
Die
dazu nötigen Command - Objekte sind im DataAdapter
Objekt enthalten.
Der DataAdapter ist das Verbindungsglied
zwischen Datenbank und DataSet.
Hierüber erfolgt der Zugriff zum Lesen und zum
Update.
WebServices sind programmierbare
Komponenten im Intranet oder Internet.
Der Aufruf erfolgt in XML codiert, das Protokoll
ist HTTP, das zusammen kennen wir
auch als SOAP.
Das bringt bedeutende
Vorteile: Da XML und HTTP auf allen gängigen
Betriebssystemen vorhanden ist, bietet sich der WebService als
ideale
Betriebssystem-Unabhängige-Verbindungs-Komponente an.
Funktionalität
in welcher Sprache auch immer geschrieben oder vorhanden, kann
relativ
einfach auf der einen Maschine in einen Web Service verpackt werden.
Der Web-Service mag hier
nur
als Wrapper dienen.
Dieser Service kann von jeder
Maschine verwendet werden, die XML über HTTP
ansteuern kann. Das Internet / Intranet werden somit
zu Business Layer.
Das bringt aber auch Nachteile : Sicherheit ist
mehr denn je gefragt.
Wir erstellen einen einfachen Web-Service, der rechnen
kann. Wie geht das
im Visual Studio ?
Wie kann ich meinen WebService testen ? Das geht sehr
komfortabel im VS Studio.
Was ist UDDI ?
Was ist WSDL ?
Wie steuere ich einen
WebService über einen Proxy an ?
Es gibt verschiedene Arten Software zu verpacken.
Zunächst sollte ein
Release Build für das Projekt erstellt
werden.
Über XCOPY verteilen, für Internet Downloads
können .cab Files erstellt werden,
sie sind komprimiert.
Wir haben auch die Möglichkeit
ein Windows Installer Package zu erstellen, dafür gibt
es ein
Setup Projekt.
Wie wird ein Setup
Programm für eine Windows Forms Anwendung erstellt ?