3. Das.NET Framework.NET Framework 3.1 Übersicht - 2002 von Microsoft bereitgestellt - Ziel: Entwicklung von Anwendungen (Windows, Web, Embedded,..) bequemer und sicherer zu machen und bestehenden Code verwendbar zu machen - es enthält - Laufzeitsystem mit - automatischer Speicherbereinigung - Sicherheitsmechanismen - Versionierung - Interoperabilität zwischen verschiedenen Programmiersprachen - objektorientierte Klassenbibliotheken - ist ein aufeinander abgestimmtes Ensemble von Bibliotheken, Betriebssystemkomponenten, Werkzeugen und Servern Komponenten & Frameworks Seite 1
Das.Net Framework.NET Framework Anwendung (C#, J#, VB.NET, Managed C++,...) Klassenbibliothek (Base Class Library) ASP.NET ADO.NET Web-Services... Laufzeitumgebung (Common Language Runtime) Garbage-Collection Sicherheit Jit-Compiler... Betriebssystem Komponenten & Frameworks Seite 2
Base Class Library - System.Collections Klassen zur Verwaltung von Sammlungen von Objekten - System.IO Klassen zur Ein- und Ausgabe - System.Threading Mechanismen für die parallele Programmierung - System.Net Klassen zur Unterstützung der Netzwerkprogrammierung - System.Reflection Erlaubt Zugriff auf Typinformationen von Programmen - System.Windows.Forms Klassen zur Behandlung grafischer Benutzerschnittstellen, erstellen per Drag and Drop möglich Ersetzt die bisherige MFC Komponenten & Frameworks Seite 3
3.2 Hello World - von der Codierung(C#) zur Ausführung 3.2.1 Codierung Aufgabenstellung: Erstellen eines Programms, das den Text Hello World auf der Console ausgibt. class HelloWorld { static void Main(string[] args) { System.Console.Write("Hello World!"); System.Console.Read(); } } Komponenten & Frameworks Seite 4
Das Programm - besteht aus der Quellcode-Datei - enthält eine (oder mehrere) Klassen (hier: HelloWorld) (Klassenname muss nicht dem Dateinamen entsprechen) - Beim Starten des Programms wird die statische Funktion Main gesucht und aufgerufen static void Main(string[] args) Die Methode Main - in jeder C# Anwendung muss es eine Main-Methode geben - Main kann in einer beliebigen Klasse definiert sein - Main muss static (Klassenmethode) sein - Kann einen int-wert zurückgeben (Batch-Verarbeitung) - Kann Befehlszeilenargumente auswerten - Kann in mehreren Klassen vorkommen, Auswahl der auszuführenden Main-Funktion erfolgt über Compileraufruf csc datei.cs /main:namensbereich.klassenname Komponenten & Frameworks Seite 5
Die Klasse - sämtliche Funktionen müssen innerhalb einer Klasse definiert werden - es gibt keine globalen Funktionen - Deklaration und Definition von Methoden erfolgt innerhalb der Klasse (abweichend zu C++) - Schlüsselwort class{...} - Elemente einer Klasse werden später besprochen, dies sind u.a. Felder, Methoden, Konstanten, Propertys, Ereignisse, Indexer, Operatoren, Konstruktoren, Destruktoren - Klassen sowie deren Elemente können mit Attributen versehen werden (deklarative Programmierung) Die Funktionen Write und Read - sind im Namespace System in der Klasse Console definiert - sind statische Methoden Komponenten & Frameworks Seite 6
3.2.2 Compilierung - Die.Net Compiler, der verschiedenen.net Sprachen, generieren keinen lauffähigen Binärcode sondern CIL (Common Intermediate Language) Code - CIL ist assemblerartiger Code - aus jeder beliebigen.net Sprache wird CIL erzeugt - Voraussetzungen für Interoperabilität - gemeinsames Typsystem CTS (Common Type System) - Definition minimaler Sprachanforderungen für.net Sprachen CLS (Common Language Specifikation) -.Net Sprachen: C#, Visual Basic, Managed C++, Fortran, Eiffel, Java, Oberon, Perl,... - Der Assembler ILASM ermöglicht es in.net Anwendungen direkt in MSIL zu schreiben - Der Disassembler ILDASM kann den Code disassemblieren Näheres zu CTS und CLS siehe: Kapitel Typen Komponenten & Frameworks Seite 7
Compilieren des Programms C#-Quelltext + Visual C#.NET- Compiler = Metadaten Intermediate Assembly Language Assembly Komponenten & Frameworks Seite 8
Disassemblierung (der.exe bzw.dll) mit ILDASM Das Manifest beschreibt die Assembly (entspricht Inhaltsverzeichnis) Komponenten & Frameworks Seite 9
Das Manifest - enthält Namen und Versionsnummer einer Assembly - enthält Informationen über Assemblies von denen die aktuelle Assembly abhängt - enthält die Informationen über die Typen der Assembly - Sicherheitsrichlinien.Net Security - Rollenbasierte Sicherheit - Codebasierter Sicherheit - ermöglicht im Vergleich zu COM-Komponenten den Verzicht der Registrierung, sowie mehrere Versionen einer Assembly - einfacher Copy-Befehl ermöglicht Verwendung einer Assembly Komponenten & Frameworks Seite 10
Komponenten & Frameworks Seite 11
MSIL-Code der Hello-World Anwendung MSIL-Code der Main-Funktion Komponenten & Frameworks Seite 12
Die Assembly - ist eine logische Gruppe von Dateien: Module und Ressourcedateien - kleinste Einheit für Wiederverwendbarkeit, Sicherheit und Versionsverwaltung (siehe: starker Namen) - hat genau ein Manifest, das die Dateien aus denen die Assembly besteht beschreibt - alle.net-binärdateien, die in Laufzeitschicht laufen sollen, bestehen aus einer (mehrere) Assembly - Beim Kompilieren eines C# Programms wird automatisch Assembly erstellt - Assembly kann signiert (privater öffentlicher Schlüssel, Projekt Eigenschaften Signierung) werden und erhält eindeutigen (starken) Namen - Zum Erstellen einer DLL ist der Schalter /t:library zu verwenden (Neu Projekt Klassenbibliothek) Komponenten & Frameworks Seite 13
Die Assembly - Module werden mit dem Kompilerschalter /t:module erstellt und enthalten kein Manifest (DLL ohne Manifest) (siehe: [Beer] S.153 ff.) - Zur Verwendung muss ein Modul in eine Assembly aufgenommen werden - Eine Assembly kann aus mehreren Dateien zusammengesetzt werden - Manifest enthält die Versionsangaben der Assembly d.h. es können gleichzeitig unterschiedliche Versionen verwendet werden (Keine DLL-Hölle) Komponenten & Frameworks Seite 14
3.2.3 Ausführen der Assembly CLR (Common Language Runtime) - ist Laufzeitumgebung unter der Assemblies ausgeführt werden - basiert auf einer virtuellen Maschine - ist ein Just-in-time-compiler - jede Methode wird beim ersten Aufruf in vorliegenden Maschinencode übersetzt, der bei nachfolgenden Aufrufen verwendet wird - Maschinencode wird nach Programmende verworfen - es besteht die Möglichkeit, Maschinencode komplett erzeugen zu lassen Komponenten & Frameworks Seite 15
3.3 Verteilte Anwendungen in.net (Übersicht) -.NET Remoting - ersetzt DCOM - ist die ideale Wahl für Intranet Szenarien - effiziente Technologie, binäre Kanäle möglich - WebServices (siehe:wcf) - geeignet für Internetanwendungen - Plattform-, Sprachen- und Betriebssystem übergreifend - geeignet für zustandslose Lösungen - pro Klientenaufruf: Webservice erstellen und zerstören - weit weniger performant als.net Remoting - ASP.NET (Active Server Pages) - Klient ist ein Webbrowser der HTML-Seiten erhält - basiert auf dem ASP-Worker-Prozess - wie bei WebServices, bei jedem Aufruf Webseiten-Objekt erstellen und anschliessend wieder zerstören - Unterschied zu Webservices: Webservices benötigen eine Anwendung die diese verwendet Komponenten & Frameworks Seite 16