# 1 Allgemeine Einführung in .NET Einem Leser, der über fundierte Grundlagenkenntnisse verfügt, eine Thematik nahezubringen, die seine Aufmerksamkeit erregt und ihm neue Kenntnisse vermittelt, ist ein nicht ganz einfaches Unterfangen. Dabei gleichzeitig auch einen Programmieranfänger behutsam in die abstrakte Denkweise der Programmlogik einzuführen, ohne gleichzeitig Frust und Enttäuschung zu verbreiten, dürfte nahezu unmöglich sein. Ich versuche mit diesem Buch dennoch diesen Weg zu beschreiten, auch wenn es manchmal einer Gratwanderung zwischen zwei verschiedenen Welten gleicht. Dabei baue ich schlicht und ergreifend auf den jahrelangen Erfahrungen auf, die ich als Trainer bei den unterschiedlichsten Seminaren mit teilweise ausgesprochen heterogenen Gruppen erworben habe. ## 1.1 Warum .NET? Vielleicht wissen Sie überhaupt noch nicht, was sich hinter .NET verbirgt? Vielleicht haben Sie sich für dieses Buch entschieden, ohne die Tragweite Ihres Entschlusses für .NET zu kennen. Ich möchte Ihnen das zunächst einmal erläutern. Blicken wir ein paar Jahre zurück, sagen wir mal in die 90er-Jahre, und stellen wir uns die Frage, wie damals Anwendungen entwickelt worden sind und wie sich die IT-Welt während dieser Zeit entwickelt hat. Am Anfang des von uns betrachteten Jahrzehnts war der Hauptschauplatz der Desktop-PC; Netzwerke steckten noch mehr oder weniger in den Kinderschuhen. Grafische Benutzeroberflächen hielten langsam Einzug auf den Rechnern, das Internet war einem nur mehr oder weniger elitären Benutzerkreis bekannt und zugänglich. Desktop-PCs wurden mit immer besserer Hardware ausgestattet, ein Super-PC von 1990 galt zwei Jahre später als total veraltet und musste wegen der gestiegenen Anforderungen der Software an die Hardware oft zumindest drastisch aufgerüstet, wenn nicht sogar ersetzt werden. Sie merken vielleicht an diesen wenigen Worten, wie dramatisch sich die IT-Welt seitdem verändert hat. Die Evolution betraf aber nicht nur Software und Hardware. Software muss, ehe sie den Benutzer bei seiner täglichen Arbeit unterstützen kann, entwickelt werden. Hier kochten viele Unternehmen ein eigenes Süppchen und warben bei den Entwicklern und Entscheidungsträgern mit Entwicklungsumgebungen, die zum einem auf den unterschiedlichsten Programmiersprachen aufsetzten und zudem auch noch mit eigenen Funktionsbibliotheken aufwarteten: Borlands Delphi, Microsofts Visual Basic, für die Puristen C und C++ – um nur die bekanntesten Vertreter zu nennen. Die Vielfalt betraf jedoch nicht nur die Entwicklung der Software. Immer neue Plattformen, angepasst an den jeweils aktuellen Trend der Zeit, eroberten den Markt und verschwanden nicht selten auch schnell wieder. Die Unternehmensnetzwerke mussten mit der stürmischen Entwicklung Schritt halten, wurden komplexer und komplizierter und öffneten sich zunehmend auch der Welt nach außen. In dieser Periode begann auch der Siegeszug des Internets. Obgleich es anfangs nur als weltweiter Verteiler statischer Dateninformationen positioniert war, wurden immer mehr Technologien ausgedacht, die die statischen Webseiten durch dynamische ersetzten, die dem Anwender nicht immer dieselben Informationen bereitstellten, sondern genau die, für die er sich interessierte. Datenbanken wurden hinter die Webserver geschaltet und fütterten die Webseiten mit dem aktuellsten Informationsstand. Kluge Köpfe erkannten auch sehr schnell, dass die Spezifikationen des Internets sich auch dazu eignen, mehrere verschiedene Unternehmen zu koppeln. Damit wurde die Grundlage dafür geschaffen, dass Sie heute im Reisebüro oder im Internet-Browser eine Reise buchen können, die nicht nur den Flug, sondern gleichzeitig auch eine gültige Hotelzimmerbuchung, vielleicht sogar samt Mietwagen, beinhaltet – obwohl hierzu schon drei Informationsquellen mit unterschiedlicher Software abgezapft werden müssen: ein nicht ganz einfaches Unterfangen, wenn Sie bedenken, dass möglicherweise die Schnittstellen, über die die verschiedenen Komponenten sich zwangsläufig austauschen müssen, nicht einheitlich definiert sind. Bei dieser rasanten Entwicklung der Möglichkeiten, Daten auszutauschen oder auch nur einfach weiterzuleiten, sollten Sie nicht vergessen, dass auch die Hardware eine ähnliche Entwicklung genommen hat. Ein Handy besitzen heutzutage schon die meisten schulpflichtigen Kinder, und Pocket-PCs, PDAs und andere Kleincomputer haben schon lange ihren Siegeszug angetreten, dessen Ende nicht im Entferntesten erkennbar ist. An der Schnittstelle all dieser Vielfältigkeit steht der Entwickler. Denn was nützen die beste Hardware und die ausgeklügelsten Spezifikationen, wenn die Bits sich nicht den Weg von einem zum anderen Endpunkt bahnen? Für diesen Bitfluss wollen Sie als Entwickler sorgen. Damit fangen aber wegen der oben erwähnten Vielgestaltigkeit der IT-Welt die Probleme an: verschiedene Plattformen, unterschiedliche Programmiersprachen, mehrere Klassenbibliotheken, eine Vielzahl zu beachtender Spezifikationen usw. Einen ersten Schritt in Richtung Vereinheitlichung beschritt die Firma Sun mit Java. Der Erfolg, den diese plattformunabhängige Sprache hatte und auch immer noch hat, war auch ein Zeichen für Microsoft, um das Entwicklerterrain zu kämpfen. Nach einer eingehenden Analyse der Anforderungen, die gegen Ende der 90er-Jahre an die damalige Software gestellt wurden, sowie einer Trendanalyse der Folgejahre wurde das .NET Framework entwickelt. Dabei konnte Microsoft die Gunst der späten Stunde nutzen und die Nachteile und Schwachpunkte, die jedes Produkt – also auch Java – hat, durch neue Ideen ausmerzen. Nein, .NET ist natürlich auch kein Heilsbringer und wird sicherlich nicht die Menschheit überdauern. Aber nach heutigen Maßstäben ist .NET das wahrscheinlich effizienteste Framework, in dessen Mittelpunkt die .NET Klassenbibliothek steht. Diese bietet Ihnen alles, was Sie zum Entwickeln brauchen – egal, ob es sich um eine einfache Anwendung handelt, die nur ein paar Daten anzeigt, oder um eine Unternehmensanwendung großen Stils. Sie können Desktop-Anwendungen genauso erstellen wie eine hochkomplexe Internet-Anwendung. Sie können die Office-Produkte damit programmieren, fremde Datenquellen anzapfen, Programme für Ihren Pocket-PC schreiben und vieles mehr. Dazu müssen Sie sich nicht immer wieder in neue Programmiersprachen und neue Entwicklungsumgebungen einarbeiten, denn alles ist wie aus einem Guss. Ich möchte jetzt nicht den Eindruck vermitteln, dass alles ganz einfach ist und Sie demnächst ganz tolle Anwendungen mit den unglaublichsten Features präsentieren können. Dafür ist die .NET-Klassenbibliothek einfach zu umfangreich. Aber Sie können sich darauf verlassen, dass Sie sich nun auf das Wesentliche Ihrer Arbeit konzentrieren können: Sie arbeiten unabhängig vom Typ der zu entwickelnden Anwendung immer in derselben Umgebung, zum Beispiel mit Visual Studio 2010. Sie brauchen sich nicht immer wieder aufs Neue in andere Programmiersprachen einzuarbeiten, sondern können auf gewonnene Kenntnisse aufsetzen. Und Ihnen werden alle Mittel an die Hand gegeben, um auf wirklich einfachste Weise mit fremden Anwendungen zu kommunizieren, wenn sich diese an bestimmten, allgemein anerkannten Spezifikationen orientieren. XML ist hierbei das Zauberwort, das das alles ermöglicht. Eine Funktionsbibliothek (eigentlich müsste ich an dieser Stelle richtigerweise von einer Klassenbibliothek sprechen) ist nur so gut, wie sie auch zukünftige Anforderungen befriedigen kann. Dass .NET hier architektonisch den richtigen Weg beschritten hat, beweist die derzeit aktuelle Version 4.0. Genau an dieser Stelle darf ich Ihnen natürlich auch den großen Haken nicht verschweigen, den die ansonsten so hervorragende Umgebung hat: Sie werden mit Sicherheit niemals alle Tiefen von .NET ergründen. Als jemand, der von der ersten Beta-Version an mit dabei war, muss ich sagen, dass ich mich immer wieder aufs Neue davon überraschen lassen muss, welche Fähigkeiten in der .NET-Klassenbibliothek schlummern. Verabschieden Sie sich von der Idee, jemals alle Klassen mit ihren Fähigkeiten erfassen zu können. Die Klassenbibliothek ist einfach zu mächtig. ### 1.1.1 Ein paar Worte zu diesem Buch Mit der Einführung von .NET in den Jahren 2001/2002 änderte sich die Philosophie der Anwendungsentwicklung – zumindest im Hause Microsoft. Die Karten wurden neu gemischt, denn das architektonische Konzept war – zumindest Microsoft – neu. Da .NET grundsätzlich plattformunabhängig ist, ähnlich wie Java auch, zeigte Microsoft gleichzeitig zum ersten Mal ernsthaft die Akzeptanz anderer Plattformen. .NET ist zu 100 % objektorientiert. Das ist Fakt. Obwohl das objektorientierte Programmieren schon seit vielen Jahren in vielen Sprachen eingeführt worden ist, sind nicht alle professionellen Entwickler in der Lage, auf dieser Basis Programme zu entwickeln. Teilweise sträuben sie sich sogar mit Händen und Füßen gegen die Denkweise in Klassen und Objekten, denn ihre Denkweise ist zu sehr in der prozeduralen Programmierung verwurzelt. Es spielt keine Rolle, ob man einfachste Programme zur Konsolenausgabe entwickelt, lokale Windows-Anwendungen oder Applikationen für das Internet – immer spielen Klassen und Objekte die tragende Rolle. Daher ist es unumgänglich, zunächst die Grundlagen einer .NET-Entwicklungssprache einschließlich des objektorientierten Ansatzes zu beherrschen, bevor man sich in das Abenteuer visualisierter Oberflächen stürzt. Mit diesem Buch möchte ich Ihnen diese notwendigen Grundlagen fundiert und gründlich vermitteln und danach zeigen, wie mit der Windows Presentation Foundation (WPF) Windows-Anwendungen entwickelt werden und wie Sie mit ADO.NET auf Datenbanken zugreifen. Das Buch ist in Kapitel aufgeteilt, die logisch aufeinander aufbauen. Jedes Kapitel enthält wiederum einzelne Abschnitte, die ein untergeordnetes Thema abgrenzen. Die Gliederung könnte man wie folgt beschreiben: Einführung in die Entwicklungsumgebung die Sprachsyntax von Visual C# einschließlich des objektorientierten Ansatzes die wichtigsten .NET-Klassenbibliotheken die Entwicklung einer grafischen Benutzerschnittstelle mit der Windows Presentation Foundation (WPF) Datenzugriffe mit ADO.NET und LINQ to SQL In diesem Kapitel werden zuerst die elementaren Grundlagen von .NET erörtert. Zwangsläufig werden Sie daher auf Begriffe stoßen, die Ihnen möglicherweise zu diesem Zeitpunkt nicht sehr viel sagen. Ich gebe gern zu, auch ich hasse Bücher, die sich zunächst ausgiebig über eine Technologie auslassen, mit Fachbegriffen jonglieren und sich erst nach einigen frustrierenden Seiten dem eigentlichen Thema widmen. Dennoch ist es unumgänglich, zuerst den Kern von .NET mit seinen Vorteilen für den Programmierer zu erläutern, bevor man sich mit der Sprache auseinandersetzt. Allerdings werde ich mir Mühe geben, Sie dabei nicht allzu sehr zu strapazieren, und mich auf das beschränken, was für den Einstieg als erste Information unumgänglich ist. Lassen Sie sich also nicht entmutigen, wenn ein Begriff fällt, den Sie nicht zuordnen können, und lesen Sie ganz locker weiter – in diesem Buch werde ich nichts als bekannt voraussetzen: Sie werden alles noch intensiv lernen. Bevor wir uns ab Kapitel 2 der Sprache widmen, wird die überarbeitete Entwicklungsumgebung Visual Studio 2010 vorgestellt (die übrigens jetzt auch mit der WPF designt wurde). Wenn Sie mit einer alten Version von Visual Studio gearbeitet haben, werden Sie sicherlich schnell mit der neuen vertraut. Sollten Sie keine Erfahrungen mitbringen, dürften am Anfang einige Probleme mit dem Handling auftreten. Dazu kann ich Ihnen nur einen Rat geben: Lassen Sie sich nicht aus der Fassung bringen, wenn sich wie von Geisterhand klammheimlich plötzlich ein Fenster in die Entwicklungsumgebung scrollt oder Sie die Übersicht verlieren – vor den Erfolg haben die Götter den Schweiß gesetzt. In Kapitel 2 beginnen wir mit dem eigentlichen Thema dieses Buches. Ich stelle Ihnen die Syntax der Sprache Visual C# 2010 vor, lasse dabei aber noch sämtliche Grundsätze des objektorientierten Ansatzes weitestgehend außer Acht. Sie sollen zunächst lernen, Variablen zu deklarieren, mit Daten zu operieren, Schleifen zu programmieren usw. In den Kapiteln 3 bis 15 wenden wir uns ausführlich dem objektorientierten Ansatz zu und werden auch ein paar besondere Technologien beleuchten. XML ist in der modernen Software allgegenwärtig. Daher wird in Kapitel 16 XML näher beleuchtet, und Sie werden die wohl wichtigsten Klassen im Zusammenhang mit der XML-Verarbeitung kennenlernen. Diese Kapitel gehören sicherlich zu den wichtigsten in diesem Buch, denn Sie werden niemals eine .NET-basierte Anwendung entwickeln können, wenn Sie nicht in der Lage sind, klassenorientierten Code zu lesen und zu schreiben. Anschließend stelle ich Ihnen die Windows Presentation Foundation (WPF) vor. Mit dieser Programmierschnittstelle können Sie Windows-Anwendungen entwickeln, die auf der Beschreibungssprache XAML basieren. Datenbanken spielen in nahezu jeder Anwendung eine wichtige Rolle. In den letzten Kapiteln werden wir uns daher mit ADO.NET beschäftigen. ADO.NET beschreibt Klassen, um auf Daten aus einer beliebigen Datenquelle, hier insbesondere einer Datenbank, zuzugreifen. Ganz zum Schluss darf natürlich auch eine Beschreibung der Verteilungstechniken einer .NET-Anwendung nicht fehlen. Vielleicht werden Sie sich fragen, wo denn ASP.NET-Webanwendungen, ASP.NET-Webdienste, .NET-Remoting, die Windows Communication Foundation (WCF) usw. ihre Erwähnung finden. Meine Antwort dazu lautet: nirgendwo in diesem Buch. Denn schauen Sie sich nur den Gesamtumfang des Buches an, das Sie gerade in den Händen halten. Die Themen, die hier beschrieben sind, werden nicht nur oberflächlich behandelt, sondern gehen oft auch ins Detail. So bleibt leider einfach kein Platz mehr für die anderen Technologien. ### 1.1.2 Die Beispielprogramme Begleitend zu der jeweiligen Thematik werden in jedem Kapitel Beispiele entwickelt, die Sie auf der DVD-ROM finden, die diesem Buch beiliegt. Im Buch sind diese Beispiele am Anfang des Quellcodes wie folgt gekennzeichnet:
    // ---------------------------------------------------------
    // Beispiel: ...\Kapitel 6\EinBeispielprogramm
    // ---------------------------------------------------------
Dieses Beispiel gehört demnach zu Kapitel 6, und der Name der Anwendung lautet EinBeispielprogramm. Eine allgemeine Bemerkung noch zu den Beispielen und Codefragmenten. Als Autor eines Programmierbuches steht man vor der Frage, welchen Schwierigkeitsgrad die einzelnen Beispiele haben sollen. Werden komplexe Beispiele gewählt, liefert man häufig eine Schablone, die in der täglichen Praxis mit mehr oder weniger vielen Änderungen oder Ergänzungen übernommen werden kann. Andererseits riskiert man damit aber auch, dass mit der Komplexität der Blick des Lesers für das Wesentliche verloren geht und schlimmstenfalls die Beispiele nicht mit der Intensität studiert werden, die zum Verständnis der Thematik erforderlich wäre.