Diplomarbeit
Einführung in Microsoft.NET
mit Beispielanwendungen
in Visual Basic .NET und C#

Verfasser :
Kemal Etcibasi, kemal@etcibasi.NET
1. Prüfer :
Prof. Dr. -Ing. R. Langmann
2. Prüfer :
Prof. Dr. -Ing. D. Arlt
Datum :
16.05.2002
(Letzte Aktualisierung: 26.05.2002)
2. Componenten Object Model (COM)
2.1. Distributed Component Object Model (DCOM)
2.2.4 ActiveX- Server- Kommponenten
3.1.1 .NET Framework Verfügbarkeit:
3.2.1 Die Architektur von .NET Framework
3.2.2 Die Klassenbibliothek von .NET Framework
4. Die Common Language Runtime (CLR)
4.1.1 Einige Vorteile der Laufzeit sind:
4.2. Die Common Language Specification (CLS)
4.2.1 Zusammenfassung der Datentypen in VisualBasic.NET
4.2.2 Vergleich der Datentypen VisualBasic.NET, C# und C++
5. Just in Time Compiler (JIT- Compiler)
5.1. Der Garbage Collector (Speicherverwaltung)
6. Intermediate Language ( IL, MSIL )
6.2.1 Beispiel: HelloWorld.exe soll disassembliert werden
7.1. Erstellen eines neuen Projekts in der IDE
7.3. Hello World in Visual Basic.NET
7.4. Hello World in Java (zum Vergleich)
7.5. Vererbung: C# Klasse wird von VisualBasic.NET verwendet
7.6. Weitergabe von .NET Programmen
8. ASP.NET (Active Server Pages .NET)
8.1.1 Hypertext Markup Language (HTML)
8.1.2 Common Gateway Interface (CGI)
8.1.3 Internet Server Application Programming Interface (ISAPI)
8.1.4 Active Server Pages ( ASP )
8.2.1 Leere ASP.NET Seite (von VisualStudio.NET erstellt)
8.2.3 Quellcode zur Webanwendung:
9.1. Internet Explorer in .NET Programm
9.1.1 Verwenden des Internet Explorers im Programm
9.1.2 Methoden vom AxWebBrowser1
9.2.1 Listingausschnitte für VisualBasic.NET
9.2.2 Listingausschnitte für Visual C#
9.2.3 Fertige COM in .NET Programmausgabe
10. Serielle Schnittstelle unter .NET ansprechen
10.1. Microsoft Comm Control 6.0 in .NET
10.1.1 Lizenz Problematik für ActiveX-Steuerelemente
10.2. ActiveX Steuerelement in die ToolBox einfügen
10.3. Verwenden der Kommunikation- Steuerelement aus der Toolbox
10.6.1 Listigsauschnitte für VisualBasic.NET
10.6.2 Listingausschnitte für Visual C#
Anhang A Serielle Schnittstelle RS 232 C Referenz
Anhang B Microsoft Visual Studio.NET
Visual Studio .NET Version BETA 2
Visual Studio .NET Version 2002
Anhang C Vollständige Listings COM in .NET
Anhabg D Vollständige Listings Serielle Schnittstelle
Die Entwickler standen bis heute vor folgenden Herausforderungen:
1. Das komponentenbasierte Anwenden ist
nicht einfach. Erinnert man sich hier beispielsweise an die Registry, in der
von jeder Komponente nur eine Version installierbar ist. Es kündigt sich eine
"DLL-Hölle" an.
2. Das Web-Programmierungsparadigma. HTML (HyperText
Markup Languace) und Scripting (Logik)
werden bei der Web-Programmierung gemischt, die Logik lässt sich manches Mal
nur schwer abtrennen. Zustandslose HTML-Seiten (oder
Web-Applikationen) sind schwer zu entwickeln.
3. Es gibt eine Vielzahl von Applikationen
wie COM (Component
Object Model), Win32, MFC
(Microsoft Foundation Class Library) usw.), die plattformabhängig sind und manchmal auch von den einzelnen
Programmiersprachen abhängen.
4. Integration von Applikationen. Da Sprachen unterschiedliche
Typsysteme haben, stellt die Typkonvertierung ein generelles Problem dar (Bsp.:
Strings). Aber hier bestehen weitere Schwierigkeiten: COM
ist ein binärer Kommunikationsstandard und "sitzt" auf anderen
Objektkonzepten. Schließlich stellen DCOM und Firewalls
ein grundsätzliches Problem dar: Für DCOM ist es notwendig,
Ports freizumachen, was aber dem Schutz durch die Firewall widerspricht...
5. Auch die Integration von Diensten und Plattformen bereitet Schwierigkeiten, denn bislang existieren noch keine Standards für die Interoperabilität.
Das Programmieren soll nun durch Microsoft .NET einfacher werden.
Ich werde im Rahmen dieser Diplomarbeit das neue Konzept „.NET“ von Microsoft näher untersuchen.
.NET ist die neue Programmierungsumgebung von Microsoft, die als Nachfolger von COM eine einheitliche Lautzeitumgebung für alle Programmiersprachen, eine umfangreiche Klassenbibliothek, eine Infrastruktur für die Ausführung von Programmen und Komponenten und neue Sprachencompiler, die einen Zwischencode erzeugen, der von der Laufzeitumgebung vor der Ausführung in Maschinencode kompiliert wird, für alle Programmierer zur Verfügung stellt.
°1-Satz Definition von .NET aus der Sicht eines Entwicklers. Zitierung aus dem Buch:
Visual Basic. NET First Guide, Markt +Technik Verlag
COM definiert eine Standardschnittstelle für die
Kommunikation von Objekten, wobei die verwendete Programmiersprache
nebensächlich ist. Mit dem Microsoft 3.1 eingeführten OLE (Object Linking and Embedding) hatte Microsoft bereits eine
Technologie geschaffen, die es ermöglichte, Objekte zwischen verschiedenen
Anwendungen auszutauschen. Mit der Weiterentwicklung von OLE2 entstand COM als einheitliches Objektmodell. COM
Objekte erscheinen in binärer (kompilierte) Form, es handelt sich um
Serverobjekte, die von einem Clientprogramm verwendet werden können. Anfangs
mussten Client und Server im selben Rechner laufen. Mit Windows NT 4.0 wurde COM zu DCOM erweitert, so das Client- und Server object auf verschieden
vernetzten Computern laufen können.
COM Objekte müssen generell registriert werden. In der Regel geschieht das beim Installieren des jeweiligen Programmpakets. Wenn es aber erforderlich ist, kann man es auch manuell registrieren. Dazu benutzt man das Programm RegSvr32.exe aus einem DOS Kommando Fenster. Ein erfolgreich registriertes Objekt wird wie in Abbildung 1 angezeigt.

Abbildung 1: Registrierung von COM Objekt
COM - Spezifikation ist unter diesem Link zu finden (.en):
http://www.microsoft.com/com/resources/comdocs.asp
Jede ActiveX - Technologie bildet eine Schnittstelle zwischen den Objekten, die diese Technologie nutzen. Die folgende Übersicht beschreibt, welche ActiveX- Technologien angeboten werden, und welchem Zweck diese dienen.
ActiveX–Dokumente ermöglichen einem Internet-Browser, der ActiveX unterstützt, die Darstellung von Dokumenten, die nicht im HTML- Format generiert wurden. ActiveX- Dokumente können AktiveX- Steuerelemente, Java-Applets und ActiveX- Dokumentobjekte enthalten und werden auch als aktive Objekte oder aktive Skripte bezeichnet.
ActiveX- Dokumente sollen dazu führen, dass die gegenwärtig anwendungsorientierte EDV-Welt revolutioniert wird. Anstelle der Applikationen sollen Dokumente wichtige Aufgaben, wie zum Beispiel das Entgegennehmen von Anwenderinformationen, ausführen. ActiveX Dokumente basieren auf der Object Linking and Embedding (OLE) -Technologie zum Einbetten oder Verknüpfen von Objekten in andere Anwendungen.
ActiveX-Scripting ist eine Skript-Sprache, die verwendet wird, um Programmcode in Websites oder Active Server Pages (ASP) zu implementieren und diesen ausführen zu lassen. Auf diese Weise können Internetseiten nicht nur dargestellt, sondern mit bestimmten Funktionen versehen werden, die zum Beispiel Anwenderdaten auswerten. Scripting ermöglicht somit die Webseiten dynamisch zu gestalten.
ActiveX-Steuerelemente bieten die Möglichkeit, Komponenten zu erstellen, die man selbst einsetzt oder weitergibt. ActiveX- Steuerelemente sind eigenständige wiederverwertbare COM Objekte. Dabei ist es unwichtig, mit welcher Programmiersprache sie erstellt wurden, d.h. ein mit VisualBasic 6.0 erstelltes ActiveX Steuerelement kann auch mit Visual C++ verwendet werden. Die einzige Bedingung besteht darin, dass die Programmiersprache, mit der man ActiveX Steuerelemente erstellt, ActiveX unterstützen muss.
ActiveX- Server- Komponenten erweitern einen Web- Server, wie zum Beispiel den Internet Information Server (IIS) in Verbindung mit Active Server Pages (ASP), um die ActiveX- Funktionalität.
.NET (sprich dot NET) ist der Name für die neue Systemplattform, die aus mehreren Teilkomponenten besteht. Dazu gehören die gemeinsame Laufzeitumgebung, das .NET Framework mit seiner umfangreichen Klassenbibliothek, die allen .NET Programmiersprachen zur Verfügung steht, sowie Compiler, Werkzeuge, Disassembler und Dokumentation. ASP.NET und ADO.NET der Nachfolger von ASP (Aktive Server Pages) und ADO (Datenbank Programmierung) sind auch Bestanteile der .NET .
.NET
Framework
Der Unterschied von .NET Framework und .NET Framework SDK ist, dass der .NET Framework SDK (Software Development Kit) neben dem .NET Framework noch verschiedene Tools enthält, wie den Kommandozeilencompiler für VisualBasic.NET, C# (sprich C Sharp) und Visual C++ . .NET Programmierung erfordert deshalb nicht unbedingt den neuen VisualStudio.NET. Im Prinzip lassen sich Programme auch mit einem Text Editor wie Notepad erstellen und unter .NET Framework SDK im DOS-Modus kompilieren und ausführen.
Das .NET Framework, nur Laufzeitumgebung, die erforderlich ist, um zum Beispiel fertige HelloWorld.exe - .NET Programme ausführen zu können. .NET Framework-SDK (Software Developper Kit), Laufzeitumgebung und Entwicklertools sind im Internet frei zum Download verfügbar.
.NET
Framework (c.a. 20 MByte):
.NET
Framework-SDK (c.a. 137 MByte):
Deutsche Version .NET Framework-SDK (c.a. 150 Mbyte):
http://www.microsoft.com/germany/ms/entwicklerprodukte/downloads/default.htm
ServicePack SP1:

Abbildung 2: Der erste SP1
Zur Zeit gibt es bereits das erste Service Pack (SP1). Es kann ebenfalls im Internet unter diesem Link heruntergeladen werden.
http://msdn.microsoft.com/netframework/downloads/sp1/download.asp
Das .NET Framework ist der für Entwickler wichtigste Bestandteil
der neuen .NET Plattform von Microsoft. Herzstück des
Frameworks ist die Common Language Runtime (CLR).
Das .NET-Framework ist die neue
Entwicklungsplattform für Anwendungen. Das Fundament bildet die Common Language
Runtime. Code, der unter der Regie der Runtime ausgeführt wird, wird als Managet-
Code bezeichnet. Das bedeutet, dass Aktionen wie das Anlegen eines
Objekt oder das Ausführen eines Methodenaufrufs nicht direkt ausgeführt,
sondern an die Runtime delegiert werden. Sie kann dann zusätzliche Dienste, wie
beispielsweise Versions- und Sicherheitsüberprüfungen, durchführen. Die Runtime
ist also quasi ein Manager für den Code, der ausgeführt werden soll. Die
Compiler des Frameworks erzeugen daher keinen native Code mehr, (Ausnahme: C++
Compiler kann wahlweise auch Maschinen Code erzeugen). Vielmehr wird aus dem
Quelltext eine Zwischensprache (MSIL-Microsoft Intermediate
Language) erzeugt, die dann unter Aufsicht der Runtime bei Bedarf zu native
Code kompiliert und ausgeführt wird (Just in time Compiler).
Da jeder .NET Compiler MSIL-Code (Microsoft
Intermediate Language) erzeugt, findet die Sprachintegration auf Codeebene
statt und nicht wie bei COM auf binärer Ebene. Mann kann nun
beispielsweise eine Klasse in einer Sprache erstellen und mit einer anderen
Sprache eine weitere Klasse davon ableiten.
Die Bedeutung, welche Sprache man zur Entwicklung von Anwendungen
benutzt, rückt damit in den Hintergrund. Man arbeitet einfach mit der Sprache,
die einem am ehesten vertraut ist.
Das .NET- Framework basiert nicht auf COM.
Das Registrieren von Objekten wird nicht mehr benötigt. Somit beschränkt sich
das Installieren einer Komponente auf ein einfaches Kopieren in das gleiche
Verzeichnis, ein Beispiel dazu im gibt es im späteren Kapitel.
Aber auch wenn COM nicht mehr benötigt werden
soll, kann man dennoch nicht völlig auf
COM verzichten. Denn, es gibt noch eigene individuelle COM Komponente, die man in der Übergangszeit benutzen muss, bis
eine vergleichbare .NET Komponente zur Verfügung steht.
Deshalb arbeitet .NET Framework auch mit COM-
Komponenten zusammen. Mann kann COM -Komponenten aus .NET heraus benutzen und umgekehrt. Die Runtime generiert
entsprechende Wrapperklassen, auch hierzu gibt es im späteren Kapitel ein
Beispiel.

Abbildung 3:
.NET
Framework Architektur
Die Systemdienste
Win32-Applikationen und COM+ Dienste bilden das gesamte Fundament des Frameworks. Auf die
Dienste des Betriebssystems setzt die Common Language Runtime
auf. Das Laufzeitmodul lädt und führt Code aus. .NET Framework stellt die
notwendigen Klassen bereit (Base Class Library BCL).
Oberhalb der .NET Klassenbibliothek (BLC) befinden sich XML –Daten (Extensible Markup
Language). Bei ADO.NET handelt es sich um Klassen, der
den Datenzugriff für das .NET Framework unterstützen.
XML spielt für die Zwischenspeicherung und den Austausch von
Daten eine Zentralle Rolle. In der
nächsten Ebene wird eine spezielle Unterstützung für zwei unterschiedliche
Anwendungstypen zur Verfügung gestellt. Einer ist ein herkömmliche
Clientanwendung, die Windows Forms verwenden. Die zweite Anwendungstype
ist ASP.NET, der Web Forms und XML Webdienste umfast.
Web- Forms: Das sind Steuerelemente, die für die
Erzeugung der Benutzerschnittstelle zuständig sind. Sie bilden typische HTML (HyperText Markup Languace) Elemente wie Textboxen oder Schaltflächen nach.
Web- Services (
Webdienste): Web Services
stellen ein Modell zur Verfügung, verschiedene Anwendungen über das Internet zu
verbinden. Dieses Model setzt auf bestehende Infrastruktur und bereits
existierende Applikationen auf, folglich basiert es auf Standards und ist
einfach und anpassungsfähig. Ein Web- Service kann als Vertrag zwischen Server
und Client verstanden werden. Solche Verträge werden in der XML
(Extensible Markup Language) basierende
Web- Service Description Languaga beschrieben. Auf diese Weise werden Web-
Services als Endpunkte definiert, die mittels XML basierten
Nachrichten kommunizieren.
Die Klassenbibliothek, die auch Base Class Library (BCL) genannt wird, ist eine Schnittstelle für
Programmierer.
Das .NET Framework enthält die Klassenbibliotheken für alle .NET –fähigen Sprachen. Die neue Programmiersprache C# wurde speziell für .NET
entworfen, deshalb kann man mit C# praktisch auch die
einfachsten Arbeiten nicht ohne Hilfe der Common Language Runtime (CLR) und des .NET Frameworks
durchführen.

Abbildung 4: Die Klassenbibliothek im .NET Framework (BCL Base
Class Library)
.NET Framework stellt eine
als Common Language Runtime (CLR) bezeichnete Laufzeitumgebung
bereit, die die Ausführung von Code verwaltet und Dienste für die Erleichterung
des Entwicklungsprozesses bereitstellt, d.h. CLR ist das Ausführungsmodul für .NET
Framework Anwendungen.
Der Code, der von der CLR ausgeführt wird, wird verwalteter Code genannt; ein Code, der nicht der Steuerung durch die CLR unterliegt, ist dagegen nicht verwalteter Code. Der gesamte VisualBasic.NET- und C#- Code ist verwaltet, doch in C++.NET besteht die Möglichkeit, sowohl in verwalteten Code als auch nicht verwalteten Code zu schreiben. Außerdem sollen beide Codetypen im gleichen Programm zusammenarbeiten können.
Die Common Language Runtime erleichtert das Entwerfen von Komponenten und Anwendungen, deren Objekte sprachübergreifend interagieren. In unterschiedlichen Sprachen geschriebene Objekte können miteinander kommunizieren. Ihr Verhalten kann in hohem Maße integriert werden. Man kann z. B. eine Klasse definieren und dann in einer anderen Sprache eine Klasse von der ursprünglichen Klasse ableiten oder eine Methode für diese aufrufen. Diese sprachübergreifende Integration wird durch die Verwendung eines von der Common Language Runtime definierten allgemeinen Typensystems durch Sprachcompiler und Tools für die Common Language Runtime ermöglicht. Hierbei werden die Regeln der Common Language Runtime für die Definition neuer Typen, das Erstellen, Verwenden und Beibehalten von Typen sowie für die Typenbindung befolgt.

Abbildung 5: Common Language Runtime
Für C++ .NET Programmierer, die verwaltete Code schreiben:
Für Umsteiger von C++ auf C#
Das allgemeine Typensystem ( Common Type System CTS ) ist das Modell, das die Regeln definiert, nach denen die Common Language Runtime beim Deklarieren, Verwenden und Verwalten von Typen vorgehen. Das allgemeine Typensystem erstellt ein Framework, das sprachenübergreifende Integration, Typsicherheit und leistungsstarke Codeausführung gewährleistet. Es stellt das Rohmaterial dar, aus dem man Klassenbibliotheken erstellen kann.
Die CLR (Common Language Runtime) stellt allen .NET Sprachen ein umfassendes Typsystem zur Verfügung. Kurz gesagt: Das Typsystem wandert vom Compiler in die Runtime. Es ist nicht mehr Bestandteil einer Sprache. Vielmehr setzen alle Sprachen auf dem Common Type System (CTS) der Runtime auf. Das bedeutet: Typen werden eindeutig, da es nicht mehr verschiedene Repräsentationen ein und desselben Typs gibt - so ist beispielsweise eine Zeichenkette unter Visual Basic .NET identisch mit einer Zeichenkette unter C#. Das heißt, CLR ermöglicht unabhängig von Programmiersprachen eine durchgängig Objekt- und Komponentenorientierte Programmierung. Es enthält zahlreiche Dienste, wie z.B: Konvertierung von IL (Intermediate Language) in systemeigenen Code, Verwalten des Arbeitsspeichers (Garbage Collector) für verwaltete Objekte und vieles mehr.
Die Common Language Specification (CLS) gemeinsame Sprachspezifikation, ist eine Gruppe von Konstrukten und Einschränkungen, die Richtlinien für Bibliotheken- und Compilerentwickler bilden. Bibliotheken können für jede Sprache, die CLS unterstützt, und die Sprachen, die untereinander integrierbar sind, umfassend verwendet werden. Die CLS ist für Anwendungsentwickler wichtig, die Code schreiben, der von anderen Entwicklern verwendet werden soll. Wenn Entwickler öffentlich zugängliche Applikationen entwerfen und dabei die Richtlinien von CLS befolgen, können diese Applikationen problemlos von allen anderen Programmiersprachen verwendet werden, die Common Language Runtime verwenden sollen, d.h., dass eine Komponente, die in eine Programmiersprache (z.B.VisualBasic.NET) programmiert wurde, in einer Klasse der anderen Programmiersprache (z.B. C#) implementiert werden kann.
Wenn die Komponente nur CLS -Features in der Applikationen verwendet, die sie anderem Code (einschließlich abgeleiteten Klassen) offen legt, wird der Zugriff auf die Komponente von allen Programmiersprachen aus garantiert, die CLS unterstützen. Komponenten, die die CLS -Regeln befolgen und nur die Features verwenden, die in der CLS enthalten sind, werden CLS -kompatible Komponenten genannt.
|
Visual Basic-Datentyp |
.NET Runtime-Datentypstruktur |
Speicherbedarf |
Wertebereich |
|
|
|
|
|
|
Boolean |
System.Boolean |
1 Byte |
True oder False |
|
Byte |
System.Byte |
1 Byte |
0 bis 255
(ohne Vorzeichen) |
|
Char |
System.Char |
2 Byte |
0 bis
65535 (ohne Vorzeichen) |
|
Date |
System.DateTime |
8 Byte |
1. Januar 100
bis 31. Dezember 9999 |
|
Decimal |
System.Decimal |
12 Byte |
+/-79.228.162.514.264.337.593.543.950.335
ohne Dezimalzeichen; |
|
+/-7,9228162514264337593543950335
mit 28 Dezimalstellen; die kleinste Zahl ungleich Null ist |
|||
|
+/-0,0000000000000000000000000001 |
|||
|
Double
|
System.Double |
8 Byte |
-1,79769313486231E308
bis |
|
(Gleitkommawert
mit doppelter Genauigkeit) |
-4,94065645841247E-324
für negative Werte, |
||
|
|
4,94065645841247E-324
bis 1,79769313486232E308 für positive Werte |
||
|
Integer |
System.Int32 |
4 Byte |
-2.147.483.648
bis 2.147.483.647 |
|
Long |
System.Int64 |
8 Byte |
-9.223.372.036.854.775.808
bis 9.223.372.036.854.775.807 |
|
(lange
ganze Zahl) |
|||
|
Object |
System.Object (Klasse) |
4 Byte |
In einer
Variablen vom Typ Object kann jeder beliebige Typ gespeichert werden. |
|
Short |
System.Int16 |
2 Byte |
-32.768
bis 32.767 |
|
Single |
System.Single |
4 Byte |
-3,402823E38
bis -1,401298E-45 für negative Werte, 1,401298E-45 bis 3,402823E38 für
positive Werte |
|
(Gleitkommawert
mit einfacher Genauigkeit) |
|||
|
String
|
System.String
(Klasse) |
10 Byte
plus (2 * Zeichenfolgenlänge) |
0 bis
ca. 2 Mrd. Unicodezeichen |
|
(variable
Länge) |
|||
|
Benutzerdefinierter
Datentyp |
(erbt aus
System.ValueType) |
Summe der
Größe der einzelnen Elemente |
Jedes
Element in der Struktur hat einen Wertebereich entsprechend seines Datentyps
und unabhängig von den Wertebereichen der anderen Elemente. |
|
(Struktur) |
|||
|
|
|
|
|
|
|
|
||
Tabelle 1: Zusammenfassung der Datentypen in VisualBasic.NET
|
|
||||||
|
Kategorie |
Klassen- name |
Beschreibung |
Datentyp
in Visual Basic |
Datentyp in C# |
Datentyp in den verwalteten
C++-Erweiterungen |
|
|
Ganze
Zahl |
Byte |
Eine 8-Bit-Ganzzahl
ohne Vorzeichen. |
Byte |
byte |
char |
|
|
|
SByte |
Eine
8-Bit-Ganzzahl mit Vorzeichen. |
SByte |
sbyte |
signed
char |
|
|
Kein
integrierter Typ. |
||||||
|
|
Int16 |
Eine
16-Bit-Ganzzahl mit Vorzeichen. |
Short |
short |
short |
|
|
|
Int32 |
Eine
32-Bit-Ganzzahl mit Vorzeichen. |
Integer |
int |
int -oder - long |
|
|
|
Int64 |
Eine
64-Bit-Ganzzahl mit Vorzeichen. |
Long |
long |
__int64 |
|
|
|
UInt16 |
Eine
16-Bit-Ganzzahl ohne Vorzeichen. |
UInt16 |
ushort |
unsigned
short |
|
|
Nicht
CLS-kompatibel. |
Kein
integrierter Typ. |
|||||
|
|
UInt32 |
Eine
32-Bit-Ganzzahl ohne Vorzeichen. |
UInt32 |
uint |
unsigned
int (oder) |
|
|
Nicht
CLS-kompatibel. |
Kein
integrierter Typ. |
unsigned
long |
||||
|
|
UInt64 |
Eine
64-Bit-Ganzzahl ohne Vorzeichen. |
UInt64 |
ulong |
unsigned
__int64 |
|
|
Nicht
CLS-kompatibel. |
Kein
integrierter Typ. |
|||||
|
Gleitkomma |
Single |
Eine
Gleitkommazahl einfacher Genauigkeit (32 Bit). |
Single |
float |
float |
|
|
|
Double |
Eine
Gleitkommazahl doppelter Genauigkeit (64 Bit). |
Double |
double |
double |
|
|
Logisch |
Boolean |
Ein
boolescher Wert (true oder false). |
Boolean |
bool |
bool |
|
|
Sonstige |
Char |
Ein
Unicode-Zeichen (16 Bit). |
Char |
char |
wchar_t |
|
|
|
Decimal |
Ein
96-Bit-Dezimalwert. |
Decimal |
decimal |
Decimal |
|
|
|
IntPtr |
Eine
ganze Zahl mit Vorzeichen, deren Größe von der zugrunde liegenden Plattform
abhängt (32-Bit-Wert auf einer 32-Bit-Plattform und 64-Bit-Wert auf einer
64-Bit-Plattform). |
IntPtr |
IntPtr |
IntPtr |
|
|
|
|
|
||||
|
Kein
integrierter Typ. |
Kein
integrierter Typ. |
Kein
integrierter Typ. |
||||
|
|
UIntPtr |
Eine
ganze Zahl, deren Größe von der zugrunde liegenden Plattform abhängt
(32-Bit-Wert auf einer 32-Bit-Plattform und 64-Bit-Wert auf einer
64-Bit-Plattform). |
UIntPtr |
UIntPtr |
UIntPtr |
|
|
Nicht
CLS-kompatibel. |
Kein
integrierter Typ. |
Kein
integrierter Typ. |
Kein
integrierter Typ. |
|||
|
Klassen-
objekte |
Object |
Der Stamm
der Objekthierarchie. |
Object |
object |
Object* |
|
|
|
String |
Eine
unveränderliche Zeichenfolge fester Länge mit Unicode-Zeichen. |
String |
string |
String* |
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
Tabelle 2: Vergleich der Datentypen VisualBasic.NET, C# und C++
Beim Aufruf werden die .NET- Applikationen, die in einer Zwischensprache: Intermediate Language (IL-Code ) liegen, vom JIT- Compiler in nativen Maschinencode übersetzt. Um das zu erreichen, hat jede Sprache ihren eigenen Compiler, der Intermediate Language erzeugt. Dem Programm wird erst der Hauptfunktion ( main() ) in Maschinencode übersetzt, der Rest wird bei Bedarf übersetzt. Allein der Microsoft C++- Compiler kann wahlweise auch noch nativen Maschinencode erzeugen.
Ein weiterer Vorteil des JIT Compilers ist es, dass er während der Ausführung erkennt ob der Applikation bereits übersetzt bzw. nicht übersetzt ist, spart sich also "doppelte Arbeit". Der übersetzte native Code wird jedoch nicht auf die Festplatte geschrieben, sondern vor jedem erneuten Programmaufruf wieder erzeugt. Die Kompilierung kann sich dadurch z.B. an das momentan verfügbare RAM anpassen. Durch Intermediate Language und JIT-Compiler wird eine Unabhängigkeit von der Hardwareplattform erreicht.
IL- Code wird durch die JIT -Compiler der Common Language Runtime bei Bedarf in native Code übersetzt und ausgeführt.

Abbildung 6 Just In Time- Compiler (JIT)
Zusammengefasst:
Durch dieses Konzept ( CLR (Common Language Runtime) und JIT- Compiler) werden alle .NET- Sprachen gleichwertig. Die Programme sehen sehr ähnlich aus, auch wenn sie mit unterschiedlichen Sprachen geschrieben wurden. Alle Compiler erzeugen für bestimmte Sprachkonstrukte, wie Schleifen oder if-Befehle, einen sehr ähnlichen IL -Code, der wiederum die für alle Sprachen gleiche Runtime verwendet. Die Runtime macht es zudem möglich, dass z.B. eine C# -Klasse von einer VB .NET- oder einer C++-Klasse abgeleitet werden kann. Aus all diesen Faktoren wiederum resultiert eine einheitliche Fehlerbehandlung in der Runtime sowie eine (nahezu) gleiche Performance. Die Programmierung mit Visual Basic.NET erhält dadurch eine deutliche Performance-Verbesserung.
Einer der Hauptgründe für Programmierfehler bei Applikationen, die rund um die Uhr laufen müssen, wie Server-Anwendungen, sind Speicherlecks. Programmierer reservieren einen Speicherblock vom Arbeitsspeicher und vergessen Ihn wieder frei zugeben. Wen solche Prozesse mehrmals aufgerufen werden, summieren sich diese Speicherlecks, und der Applikation geht der Speicher aus. Das ist kein großes Problem bei Programmen wie Notepad, die der Benutzer wenige Minuten benutzt und wieder schließt. Aber beim Anwendungen wie Webservern, die immer laufen müssen, ist das ein großes Problem.
Der Garbage Collector im Microsoft.NET Framework verwaltet nun den Speicher automatisch. Das bedeutet jetzt für Programmierer: Sie können ein Objekt im Speicher anlegen, es benutzen und es dann einfach vergessen. Denn es ist sicher, dass der Garbage Collector irgendwann aufräumt. Dadurch ist es leichter geworden, Anwendungen zu schreiben, die auch über Monate stabil laufen können.
Allerdings weiß der Programmierer nicht, wann nun genau das Objekt im Speicher zerstört wird. Der Garbage Collector beginnt erst dann aufzuräumen, wenn es notwendig ist, Speicherplatz freizugeben. Der Garbage Collector soll sehr schnell, effizient und im Prinzip nicht zu spüren sein. Die Vorteile der Garbage Collection: Es entstehen deutlich weniger Speicherlecks, die Programmierung wird ebenfalls vereinfacht.
Die Kompilierung aller .NET-Sprachen führt zu einer Zwischensprache, Intermediate Language ( IL ). Diese Sprache ist auch unter der Bezeichnung MSIL (Microsoft Intermediate Language) bekannt.
IL ähnelt Java-Bytecode darin, dass es sich um eine zwischengeschaltete Codeform handelt, die vom Compiler erstellt wird und nicht direkt auf einem Zielsystem ausgeführt werden kann. Im Gegensatz zu Java wird IL -Code allerdings vor der Ausführung immer in nativen Code konvertiert; diese Aufgabe übernimmt ein JIT -Compiler (Just In Time Compiler). Diese Konvertierung kann nach Bedarf ausgeführt werden, also Funktion für Funktion während der Programmausführung, oder insgesamt im Rahmen der Programminstallation.
Einer der großen Vorteile von IL liegt darin, dass es sich nicht einfach um einen maschinenenabhängigen Objektcode auf niedriger Ebene handelt. Tatsächlich ist die Unterstützung objektorientierter Funktionalität wie etwa die Ideen von Klassen, Kapselung und Verbergen von Daten und Vererbung in IL integriert. Mann kann daher IL als einen Typ einer objektorientierten Assemblersprache ansehen. IL ist dadurch wesentlich leistungsfähiger als Java-Bytecode und ermöglicht die sprachübergreifende objektorientierte Programmierung.
IL -Code hat, aus der Sicht eines Entwicklers gesehen, auch einen Nachteil. Denn IL Code ist einfacher zu dekompilieren als Maschinencode. Mit dem Disassembler ildasm.exe von .NET Framework SDK können die Programme wieder disassembliert werden. Somit hat man Einblicke in die Quellcodes des Entwicklers. Im Internet gibt es sogar Tools, mit der der Quellcode noch ausführlicher betrachtet werden kann:
http://www.remotesoft.com/salamander/index.html
http://www.gotdotnet.com/team/csharp/thirdparty/default.aspx
Deshalb versuchen Entwickler, ihre Codes mit Hilfe von Obfuscator zu schützen. Ein Obfuscator kann zumindest die Metainformationen so transformieren, das eine Dekompilierung kräftig erschwert wird. Somit steht der Dieb dann noch vor dem Problem, Hunderte von Klassen und Tausende von Methoden einen semantisch sinnvollen Namen zuzuordnen.
Mit einen Disassembler ildasm.exe werden einige wichtige Informationen herausgefunden:
Diese Daten sind wichtig, wenn eine Klasse von einer anderen Klasse abgeleitet werden soll, oder eine vorhandenes COM Objekt, aus dem zuvor Assemblies erstellt wurden, weiter in .NET eingesetzt werden sollen. Das sollte dem auch der eigentliche Zweck des Disassemblers sein.
Mit dem Microsoft Tool ildasm.exe erhält man einen groben überblick.

Abbildung 7: Mit ildsm disassembliert, verschlaft einen groben überblick
Mit dem Salamander .NET Decompiler aus dem Internet erhält man den Original Quelcode zurrück.
http://www.remotesoft.com/salamander/index.html

Abbildung 8: Salamander .NET Decompiler aus dem Internet

Abbildung 9: Quelcode HelloWorld.exe disassembliert mit
Salamander .NET Decompiler
Mit einen Obfuscator werden Teile des Programms verschlüsselt. Bei einem großem Programm wäre damit das Entschlüsseln schwieriger.
http://www.remotesoft.com/servlet/obfuscator

Abbildung 10: Verschlüsseltes Quelcode von HelloWorld.exe
Zum öffnen der IDE (Integrrated Development Environment, Integrierter Entwicklungsumgebung) auf Start, Programme, Microsoft Visual Studio .NET und Microsoft Visual Studio .NET klicken. Die IDE-Startseite wird wie in Abbildung angezeigt.

Abbildung 11:
Startseite
in der IDE von Visual Studio .NET
Auf Datei, Neu und Projekt klicken (oder direkt auf das Button „Neues Projekt“). Das Fenster Neues Projekt wird wie in Abbildung: Neues Projekt angezeigt.
Die Programmierungsumbebung erscheint wie in Abbildung, und es kann mit dem Programmierung begonnen werden.

Abbildung 12:
Neues
Projekt

Abbildung 13:
Programmierungsumgebung
Listing
HelloWorld.cs
using System;
class HelloWorld
{
public
static void Main()
{
Console.WriteLine("Hello
World !");
}
}
Wenn der Systemnamespace mit using Sytem; zuvor deklariert wird, kann anstelle von System.Console.WriteLine() kurz Console.WriteLine() (wie hier im Beispiel) verwendet werden, aber wenn using System.Console; deklariert wurde, reicht ein Befehl WriteLine()zum anzeigen eines Textes auf einem DOS Fenster aus.
Im Hauptmenu von VisualStudio.NET: Debbugen – Starten (kein debbugen) kann das Programm kompiliert und ausgeführt werden. Als Ausgabe erhält man dieses Abbildung:

Abbildung 14: HelloWorld.EXE Programmergebnis
Alternativ kann zur Programmierung ein Texteditor wie Notepad verwendet werden. Nach Speicherung als HelloWorld.cs kann es unter Visual Studio Command Prompt mit dem Kommandozeilen Compiler für C# csc.exe manuell kompiliert werden.
csc HelloWorld.cs
Zum erstellen von Konsole Anwendung in Visual Basic.NET mit VisualStudio.NET werden die gleichen Schritte wie oben bei C# angewendet. Es kann hier auch alternativ ein Texteditor benutzt werden.
Der Compiler für VisualBasic.NET ist vbc.exe.
vbc HelloWorld.vb
Listing HelloWorld.vb :
Imports System
Module Module1
Sub Main()
Console.WriteLine("Hello World")
End Sub
End Module
Auch hier gilt, wenn der Systemnamespace mit Imports System zuvor deklariert wird, kann anstelle von System.Console.WriteLine() kurz Console.WriteLine() (wie hier im Beispiel) verwendet werden, aber wenn Imports System.Console deklariert wurde, reicht ein Befehl WriteLine()zum anzeigen eines Textes auf einem DOS Fenster aus.
Die Programmiersprachen VisualBasic.NET, Visual C# und Java sind sich sehr ähnlich. Vor allem VisualBasic.Net und C# sind sich nicht nur im Struktur sehr ähnlich, auch dessen IL Code soll sehr ähnlich sein. Nur die Syntax der Programme ist verschieden.
Beim Vorgänger Visual C++ musste man noch mit #Include Anweisung Standard Bibliotheken zum Programm linken. Das ist jetzt wie bei Java für C# nicht mehr erforderlich. Standard Bibliotheken sind im .NET enthalten (Base Class Library).
Mit einem Texteditor erstellt und als HelloWorld.java Datei gespeichert. Compilerplierung erfolgt mit javac.exe HelloWorld.java , der im Java Development Kit 1.2 ( JDK) enthalten ist. Als Resultat erhält man einen Zwischencode HelloWorld.class, der mit Java.exe HelloWorld ausführbar ist.
Listing HelloWorld.java
public class HelloWorld
{
public static void
main(String[]args)
{
System.out.println("Hello
World");
}
}

Abbildung
15: Ausgabefenster HelloWorld.class in Java
Listing: C#
Class1.cs
using System;
namespace ClassC
{
public class Class1
{
public
Class1()
{
Console.WriteLine("Dieser
Text ist in Class1.cs");
}
}
}
Listing:
VisualBasic.NET Module1.vb
Imports System
Module Module1
Sub Main()
Console.WriteLine("Text aus VB
Programm")
Dim v As New ClassC.Class1()
v.GetType()
End Sub
End Module

ß Die C# Klasse ClassC muss als Verweis in
VisualBasic.NET
Projekt hinzugefügt werden.
Abbildung 16:
Verweis
für Vererbung

Abbildung 17: Programmergebnis Vererbung
Das vorherige Beispiel, in der ein VisualBasic.NET Programm ein C# Klasse verwendet, soll weitergegeben werden. Das ausführbare Programm (*.exe) mit dem notwendigen Assemblies befinden sich im bin Verzeichnis des Projekts VererbungVB. Es genügt, den Inhalt des bin Ordners von PC1 zum PC2 zu kopieren.
Das Programm ist im PC2 sofort ohne Registrierung aus dem Verzeichnis heraus ausführbar. Vorrausgesetzt natürlich, daß im PC2 .NET Framework Laufzeitumgebung auch installiert ist

Abbildung 18:
Ergebnis
einer Weitergabe
Grundprinzip der ASP.NET ist genauso so wie die des Vorgängers CGI (Common Gateway Interface), ISAPI (Internet Server Application Programming Interface) und ASP: Client fragt über ein Browser (Internet Explorer) eine Seite ab, der Server verarbeitet dieses HTML (HyperText Markup Languace) Formular, und als Ergebnis bekommt der Client eine individuell neu erzeugte HTML Seite zurück.
Client Server
HTML Datei mit Formular
Automatisch
erzeugte neue individuelle HTML Datei
Abbildung 19:
Grundprinzip dynamischer Inhalt
Hypertext Markup Language (HTML) ist eine Markierungssprache, d.h., eine Sprache zur Beschreibung der Text- und Grafikdarstellung. HTML Dokumente enthalten Tags, mit denen die Elemente innerhalb eine HTML-Dokuments gesteuert werden. Tags sind Schlüsselwörter, die von eckigen Klammern umschlossen werden. ( < > ).
HTML eignet sich besonders für statische Webseiten, die nur selten geändert werden. Es ermöglicht die Formatierte Anzeige von Dokumenten, die nicht nur mit einer anderen Textverarbeitungsanwendung, sondern auch mit anderen Computertyp erstellt worden waren, die wiederum über Internet verbunden sein können.
HTTP (Hypertext Transfer Protocol) ist das Übertragungsprotokoll von HTML. Das HTTP- Protokoll eignet sich auch zum dynamischen Inhalt. Mit dynamischen Inhalt sind nicht die animierten Icons im Internetseiten gemeint. Diese können im lokalen Client Rechner mit JavaScript erzeugt werden. Dynamische Webseiten ermöglichen eine Bidirektionale Kommunikation zwischen Server und Client. Anhand eines Formulars auf einer Webseite kann der Benutzer angepassten Inhalt anfordern. Wenn zum Beispiel ein Benutzer auf einen Bank Webseite seine Kontonummer und BLZ eintippt, bekommt er für sich eine angepasste HTML Seite.
Beispiel: Ein minimal erforderliches HTML
Dokument: