Diplomarbeit

 

 

 

Einführung in Microsoft.NET mit Beispielanwendungen

 

in Visual Basic .NET und C#

 

 

 

 

 

 

 

Verfasser       : Kemal Etcibasi,  kemal@etcibasi.NET

                          http://www.etcibasi.NET

1. Prüfer         : Prof. Dr. -Ing. R. Langmann

2. Prüfer         : Prof. Dr. -Ing. D. Arlt

Datum            : 16.05.2002

 


Inhaltsverzeichnis

 

(Letzte Aktualisierung: 26.05.2002)

 

Inhaltsverzeichnis. 2

1. Vorwort und Einleitung. 4

1.1. .NET in einem Satz: °. 4

2. Componenten Object Model (COM) 5

2.1. Distributed Component Object Model (DCOM) 5

2.2. ActiveX.. 6

2.2.1 ActiveX –Dokumente. 6

2.2.2 ActiveX- Scripting. 6

2.2.3 ActiveX- Steuerelemente. 6

2.2.4 ActiveX- Server- Kommponenten. 6

3. .NET Framework. 7

3.1. .NET. 7

3.1.1 .NET  Framework Verfügbarkeit: 8

3.2. Das .NET Framework. 9

3.2.1 Die Architektur von .NET Framework. 10

3.2.2 Die Klassenbibliothek von .NET Framework. 11

4. Die Common Language Runtime (CLR) 12

4.1.1 Einige Vorteile der Laufzeit sind: 13

4.2. Die Common Language Specification (CLS) 14

4.2.1 Zusammenfassung der Datentypen in VisualBasic.NET. 15

4.2.2 Vergleich der Datentypen VisualBasic.NET, C# und C++. 16

5. Just in Time Compiler (JIT- Compiler) 18

5.1. Der Garbage Collector  (Speicherverwaltung) 19

6. Intermediate Language ( IL, MSIL ) 20

6.1. Nachteil von IL-Code. 20

6.2. Der IL Disassembler 21

6.2.1 Beispiel: HelloWorld.exe soll disassembliert werden. 21

7. Hello World ! 24

7.1. Erstellen eines neuen Projekts in der IDE. 24

7.2. Hello World in C#. 26

7.3. Hello World in Visual Basic.NET. 27

7.4. Hello World in Java (zum Vergleich) 28

7.5. Vererbung: C# Klasse wird von VisualBasic.NET verwendet 29

7.6. Weitergabe von .NET Programmen. 30

8. ASP.NET (Active Server Pages .NET) 31

8.1. Rückblick. 31

8.1.1 Hypertext Markup Language (HTML) 31

8.1.2 Common Gateway Interface (CGI) 32

8.1.3 Internet Server Application Programming Interface (ISAPI) 32

8.1.4 Active Server Pages ( ASP ) 33

8.2. ASP.NET. 34

8.2.1 Leere ASP.NET Seite (von VisualStudio.NET erstellt) 35

8.2.2 ASP.NET Beispiel 36

8.2.3 Quellcode zur Webanwendung: 37

8.2.4 Listing HTML. 38

8.2.5 Listing VisualBasic.NET. 39

8.2.6 Programmausgabe. 40

9. COM in .NET.. 41

9.1. Internet Explorer in .NET Programm.. 41

9.1.1 Verwenden des Internet Explorers im Programm.. 43

9.1.2 Methoden vom AxWebBrowser1. 45

9.1.3 Layout erstellen. 47

9.2. Quellcode zum Programm.. 48

9.2.1 Listingausschnitte für VisualBasic.NET. 48

9.2.2 Listingausschnitte für Visual C#. 49

9.2.3 Fertige COM in .NET Programmausgabe. 51

10. Serielle Schnittstelle unter .NET ansprechen. 53

10.1. Microsoft Comm Control 6.0 in .NET. 53

10.1.1 Lizenz Problematik für ActiveX-Steuerelemente. 54

10.2. ActiveX Steuerelement in die ToolBox einfügen. 54

10.3. Verwenden der Kommunikation- Steuerelement aus der Toolbox. 56

10.4. Methoden vom AxMSComm1. 58

10.5. Layout erstellen. 60

10.6. Quellcode zum Programm.. 61

10.6.1 Listigsauschnitte für VisualBasic.NET. 61

10.6.2 Listingausschnitte für Visual C#. 62

10.6.3 Programmausgabe. 63

Zusammenfassung und Ausblick. 64

Anhang A  Serielle Schnittstelle RS 232 C Referenz. 65

RS-232-C Standard. 65

Nullmodemkabel 66

Anhang B  Microsoft Visual Studio.NET.. 67

Visual Studio .NET Version BETA 2. 67

Visual Studio .NET Version 2002. 68

Erforderlicher Komponenten. 69

Anhang C  Vollständige Listings COM in .NET.. 70

Listing für VisualBasic.NET. 70

Listing für C#. 73

Anhabg D  Vollständige Listings Serielle Schnittstelle. 77

Listing für Visual Basic.NET. 77

Listing für C#. 80

Quellenverzeichnis. 84

Links: 84

News Groubs: 87

Andere Quellen: 87

Recherchen : 87

Bücher 88

Abbildungsverzeichnis. 89

Tabellenverzeichniss. 90

Glossar. 91

 

 


1. Vorwort und Einleitung

 

 

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.

 

 

 

 

1.1. .NET in einem Satz: °

 

.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

 

 


2.  Componenten Object Model (COM)

 

2.1. Distributed Component Object Model (DCOM)

 

 

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

 

 


2.2. ActiveX

 

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.

 

 

2.2.1 ActiveX –Dokumente

 

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.

 

 

2.2.2 ActiveX- Scripting

 

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.

 

 

2.2.3 ActiveX- Steuerelemente

 

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.

 

 

2.2.4 ActiveX- Server- Kommponenten

 

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.

 

 


3. .NET Framework

 

 

3.1. .NET

 

.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.

 

 


3.1.1 .NET  Framework Verfügbarkeit:

 

 

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):

http://msdn.microsoft.com/downloads/default.asp?url=/downloads/sample.asp?url=/msdn-files/027/001/829/msdncompositedoc.xml

 

.NET Framework-SDK (c.a. 137 MByte):

http://msdn.microsoft.com/downloads/default.asp?url=/downloads/sample.asp?url=/msdn-files/027/000/976/msdncompositedoc.xml

 

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

 

 


3.2. Das .NET Framework

 

 

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.

 

 


3.2.1 Die Architektur von .NET Framework

Textfeld: VisualStudio.NET 

 


                                                                 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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.


3.2.2 Die Klassenbibliothek von .NET Framework

 

 

 

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)

 

 


4. Die Common Language Runtime (CLR)

 

 

.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

 


 

4.1.1 Einige Vorteile der Laufzeit sind:

 

Für C++ .NET Programmierer, die verwaltete Code schreiben:

Für Umsteiger von C++ auf C#

 


4.2. Die Common Language Specification (CLS)

 

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.

 


4.2.1 Zusammenfassung der Datentypen in VisualBasic.NET

 

 

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

 

 


4.2.2 Vergleich der Datentypen VisualBasic.NET, C# und C++

 

 


In der folgender Tabelle werden einige der in .NET Framework verfügbaren Datentypen mit einer Kurzbeschreibung und den entsprechenden Typen in Visual Basic .NET, C# und den verwalteten C++ dargestellt.


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.
Nicht CLS-kompatibel.

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++

 


5.  Just in Time Compiler (JIT- Compiler)

 

 

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.


5.1. Der Garbage Collector  (Speicherverwaltung) 

 

 

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.

 

 


6. Intermediate Language ( IL, MSIL )

 

 

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.

 

 

 

6.1. Nachteil von IL-Code

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.

 

 

 


6.2. Der IL Disassembler

 

Mit einen Disassembler ildasm.exe werden einige wichtige Informationen  herausgefunden:

 

  1. Der Namespace der Assembly
  2. Die exakten Namen der Klassen
  3. Die Datentypen der Methoden und Eigenschaften
  4. Die exakte Schreibweise der Methoden und Eigenschaften

 

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.

 

 

 

6.2.1 Beispiel: HelloWorld.exe soll disassembliert werden

 

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

 

 


7. Hello World !

 

 

7.1. Erstellen eines neuen Projekts in der IDE

 

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


7.2. Hello World in C#

 

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

 

 

 


7.3. Hello World in Visual Basic.NET

 

 

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).

 

 


7.4. Hello World in Java (zum Vergleich)

 

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

 

 


7.5. Vererbung: C# Klasse wird von VisualBasic.NET verwendet

 

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

 

 

 

7.6. Weitergabe von .NET Programmen

 

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

 

 


8. ASP.NET (Active Server Pages .NET)

 

 

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

 

 

 

 

8.1. Rückblick

 

8.1.1 Hypertext Markup Language (HTML)

 

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:

 </