Freigeben über


Dr. GUI .NET 1.1 #0

 

Überarbeitet für Version 1.1 des Microsoft .NET Framework

24. April 2003

Zusammenfassung: Dr. GUI führt die .NET Framework, Visual Basic .NET und C# ein, nachdem erläutert wurde, warum die .NET Framework für Programmierer interessant ist. Der gute Arzt zeigt dann "Hallo Welt!"-Programme in Visual Basic .NET, C# und ASP.NET an und zeigt, wie eine Auslagerungsfunktion im .NET Framework ausgeführt wird. Schließlich zeigt Dr. GUI die IL und die Metadaten einiger Programme an, sodass Sie "unter der Haube" des Frameworks sehen können. (50 gedruckte Seiten)

Inhalte

Dr. GUI .NET ist zurück...
Was ist .NET?
Dr. GUI's Take on the .NET Framework
Warum lernen Sie die .NET Framework?
Worüber werden wir diskutieren?
Installationshinweise
Schreiben von Programmen für .NET
Hallo Welt .NET in C# und Visual Basic .NET
Austauschen mithilfe von ASP.NET
Versuch es doch mal!
Kommen Sie zu uns!
Weitere Informationen
Was wir getan haben; Was kommt als nächstes

Zeigen Sie den Quellcode der Auflistungsdatei an, der diesem Artikel beigefügt ist.

Dr. GUI .NET ist zurück...

Diejenigen von Ihnen, die regelmäßige Leser der Tutorial-Reihe von Dr. GUI waren, haben möglicherweise den guten Arzt vermisst - er war vor kurzem beurlaubt. Aber jetzt ist er zurück ... und die Dr. GUI .NET-Spalte wird besser denn je sein.

Nach verschiedenen Bearbeitungen überarbeitet Dr. GUI nun die Artikel, um der endgültigen Version 1.1 der Microsoft® .NET Framework und Microsoft Visual Studio® .NET 2003 zu entsprechen. Die überarbeitete Reihe verwendet C# und Microsoft® Visual Basic® .NET in Clientanwendungen und Visual Basic .NET in Microsoft® ASP.NET-Anwendungen.

So hat der gute Arzt die gleiche alte Mission, aber jetzt wird die Mission erneuert. Es soll Ihnen helfen, unabhängig davon, welche Art von Programmierung Sie jetzt machen, über die .NET Framework und wie Sie es optimal nutzen können.

Warum sollte ich Dr. GUI .NET lesen?

Bevor Sie viel weiter lesen, wäre es hilfreich, einen Blick darauf zu werfen, worum es in dieser Spalte geht, wer wahrscheinlich davon profitiert und wie.

Einfach ausgedrückt: Dr. GUI .NET geht es darum, zu lernen, wie man für die .NET Framework programmieren kann. Unabhängig davon, ob Sie C# oder Visual Basic .NET verwenden, werden Sie feststellen, dass die Artikel und der Code in Ihrer Sprache geschrieben sind. (Dr. GUI entschuldigt sich im Voraus, wenn Sie Microsoft JScript® .NET oder C++ verwenden. Es gibt nur so viele Stunden an einem Tag.)

Wenn Sie also ein C-, C++-, C#- oder Microsoft Visual J++-® Programmierer sind (oder ein Programmierer, der die Sprache verwendet, deren Name mit "J" beginnt, von nun an als "Brand J" bezeichnet), sollten Sie sich über die .NET Framework mit C# informieren. Lesen Sie weiter. Und wenn Sie ein Visual Basic-Programmierer sind, erhalten Sie hier das, was Sie benötigen.

Und da die Beispiele in beiden Sprachen sind, wird jeder ein wenig über die andere Sprache lernen – eine gute Sache, da die ständigen Sprachdebatten nie geregelt werden, sodass viel Code in beiden Sprachen geschrieben wird. (Dr. GUI vermutet, dass zweisprachig oder mehrsprachig eine schöne Erhöhung wert ist.)

Aber warten Sie ... es gibt noch mehr! Zusätzlich zu Konsolenanwendungen führen wir auch alle Beispiele als ASP.NET Anwendungen aus. Sie sind nicht großartig ASP.NET Anwendungen, und Sie werden hier nicht lernen, ein großartiger ASP.NET Programmierer zu sein (dazu siehe https://asp.net/). Wenn Sie jedoch ASP- oder ASP.NET Programmierer sind, können Sie sehen, wie der Reichtum der .NET Framework Ihre Programmierung einfacher und produktiver machen kann – und dadurch zu einem besseren Programmierer werden kann.

Wenn Sie kein ASP.NET Programmierer sind, haben Sie die Möglichkeit, ein wenig über ASP.NET Programmierung zu lernen und sich vielleicht inspirieren zu lassen, woanders mehr zu lernen und mit ASP.NET eine erweiterte Programmierung durchzuführen. Dr. GUI hat es wirklich genossen, etwas über ASP.NET Programmierung zu lernen, um diese Kolumne zu schreiben, und er freut sich darauf, mehr zu tun – ASP.NET macht die Webprogrammierung wirklich einfach für Leute, die derzeit keine Webprogrammierung machen. ASP.NET macht es einfach und macht Spaß, weil es vertraut ist.

Der Einfachheit halber werden sich die meisten unserer ASP.NET Anwendungen nach dieser Spalte in Visual Basic .NET befindet. Dr. GUI entschuldigt sich erneut im Voraus bei Personen, die C# verwenden möchten, aber stellt fest, dass es ziemlich einfach sein wird, die C#-Konsolenbeispiele in ASP.NET zu übersetzen – insbesondere, da Sie die Visual Basic .NET-Konsolenanwendung und das Visual Basic .NET ASP.NET Beispiel als Leitfaden in jedem Fall haben. (Zeigen Sie den Quellcode der Auflistungsdatei an, der diesem Artikel beigefügt ist.)

Wer sollte Dr. GUI .NET lesen?

Wer sollte also Dr. GUI .NET lesen? Nun, alle, die für die .NET-Plattform programmieren möchten, einschließlich C#, C,C++, Visual J++, Brand J und Visual Basic-Programmierer, sowie Leute, die eine beliebige Sprache für ASP und ASP.NET verwenden. Und was lernen Sie? Sie erfahren ein wenig über die Zusammenstellung der .NET Framework, ein wenig über ihre Funktionsweise und viel darüber, wie Sie effektive Programme mit ihr schreiben können, unabhängig davon, welche Art von Anwendungen Sie schreiben.

Nicht alles für alle, aber

Dr. GUI .NET kann nicht für jeden alles sein. Wenn Sie bestimmte Dinge lernen möchten, z. B. erweiterte ASP.NET Anwendungsentwicklung und Datenbankzugriffstechniken, müssen Sie sich an anderer Stelle umsehen. Glücklicherweise gibt es viele gute Informationsquellen – einer der besten Orte, um sich anzuschauen, ist .https://asp.net/

Warum also Dr. GUI .NET?

Diejenigen unter Ihnen, die "Fragen Sie Dr. GUI" und die älteren Versionen von Dr. GUI .NET folgen, wissen, dass Dr. GUI von Microsoft .NET sehr begeistert ist, auch wenn er nicht immer 100 Prozent sicher ist, was alles in .NET enthalten ist und was nicht zu einem bestimmten Zeitpunkt. (Wenn Sie es herausfinden möchten, besuchen Sie die offizielle .NET-Website.) All die Benennungsverwechslungen erinnern den guten Arzt an die Microsoft ActiveX-Tage® – wo Marketing im Spiel ist, gibt es Namensverwirrung. Dr. GUI's Favorit war die kurzlebige Beharrung, dass das "X" in "ActiveX" still sein sollte. Die Entsprechung in der .NET-Welt ist, ob ein Leerzeichen vor dem "Punkt" vorhanden ist oder nicht. Die Regel, so wenig wie Dr. GUI es versteht, ist, dass es für Produkte gibt, z. B. Visual Studio .NET, aber nicht für Technologien wie ASP.NET. (Dr. GUI möchte nicht einmal wissen, warum.)

Unabhängig davon, ob der gute Arzt genau bekommt, was Teil von .NET ist und was nicht, und wie sehr sich das in den nächsten Jahren ändern wird, versteht er den wichtigsten Teil, der für Entwickler wichtig ist: die .NET Framework. Er "bekommt" nicht nur diesen Teil, er ist sehr begeistert davon – es wird die Entwicklung spaßiger und produktiver machen. Und während sich die .NET Framework in den nächsten Jahren verbessern wird, wird es nicht bald verschwinden.

.NET abrufen

Sie können die .NET Framework 1.1 mit oder ohne Visual Studio .NET jetzt abrufen. Und wenn Sie ASP.NET Anwendungen schreiben, gibt es eine Technologievorschau für eine neue kostenlose IDE namens Web Matrix, die Sie jetzt ausprobieren können.

.NET Framework: Kostenlos!

Die .NET Framework selbst, einschließlich Compilern, ist kostenlos. Das .NET Framework SDK und redistributables finden Sie unter .NET Framework Downloads. Über diese URL können Sie auch die verteilbaren Teile herunterladen, die Sie (und Ihre Kunden) benötigen, um .NET Framework Anwendungen auszuführen. Beide sind kostenlos.

Webmatrix: Kostenlos!

Visual Studio, die unten erläutert wird, ist ein hervorragendes Tool zum Schreiben einer Vielzahl von Anwendungen – sowohl unter Verwendung des .NET Framework als auch des regulären nativen Codes in C/C++.

Wenn Sie jedoch nur ASP.NET Anwendungen schreiben, sollten Sie Web Matrix ausprobieren. Es handelt sich um eine Technologievorschau (Version 0.5) einer von der Community unterstützten IDE zum Erstellen ASP.NET Webanwendungen. Es verfügt weder über Intellisense noch über einen Debugger und basiert auf MSDN Online für das Hilfesystem, anstatt ein eigenes schnelleres Hilfesystem mit Index zu installieren. Visual Studio ist also immer noch das Geld wert. Auf der anderen Seite ist der Download nur 1,2 MB, und es ist kostenlos, also warum nicht ausprobieren? Sie finden sie in https://asp.net/webmatrix.

Visual Studio: Nicht kostenlos, aber jeden Cent wert!

Obwohl Sie für die .NET Framework kostenlos entwickeln können, empfiehlt Dr. GUI dringend, Visual Studio .NET Professional Edition (oder höher) oder mindestens eine der einsprachigen Standardeditionen wie Microsoft Visual C# ™ .NET zu verwenden. Die Standard Editionen sind ein unglaubliches Angebot bei einem empfohlenen Einzelhandelsgeschäft von 109 US-Dollar.

Wenn Sie MSDN-Abonnent sind, sollten Sie Ihre Kopie von Visual Studio .NET in Kürze erhalten, sofern noch nicht geschehen. Sie können es auch als (riesigen!) Download unter MSDN-Abonnements erhalten. (Das Abrufen eines MSDN-Abonnements ist eine der besten Möglichkeiten, Visual Studio .NET und alle anderen Dinge zu erhalten, die Sie für Microsoft® Windows® entwickeln müssen.) Wenn Sie kein MSDN Professional-, Enterprise- oder Universal-Abonnent sind, können Sie Visual Studio .NET oder eine der einsprachigen Standard Editionen bei Ihrem bevorzugten Softwarehändler kaufen. Sehen Sie es sich auf der Visual Studio .NET-Website an. Die einsprachigen Standardeditionen sind unter dem Link "Entwicklertools" aufgeführt.

Und wenn Sie ein C++/MFC-Typ wie Dr. GUI sind, werden Sie besonders erstaunt sein, wie einfach und lustig die Kombination von Visual Studio .NET und ASP.NET Web Forms es zum Erstellen von Webanwendungen macht. Dr. GUI hatte in der Vergangenheit versucht, das Schreiben von Webanwendungen aufgrund der Schwierigkeiten beim Einrichten eines Webservers, der Komplikation des Anforderungs-/Antwort-Programmiermodells und des Schreibens in gemischtem HTML und Skript sowie der Einschränkungen der verfügbaren Skriptsprachen zu vermeiden. Visual Studio .NET richtet jedoch die Anwendung auf dem Webserver für Sie ein, das Steuerelement-/Ereignismodell macht die Programmierung Web Forms so einfach wie das Schreiben von Visual Basic-Code (und ohne HTML zu schreiben, es sei denn, Sie möchten), und da die Programmiersprachen genau die gleichen Sprachen sind, die für alle .NET Framework Anwendungen verwendet werden, stehen Ihnen leistungsstarke Standardsprachen mit einer unglaublich umfangreichen Klassenbibliothek zur Verfügung. Mit anderen Worten: Webprogrammierung macht jetzt genauso Spaß und einfach wie das Schreiben von MFC- oder Visual Basic-Anwendungen.

Wenn Sie ein ASP-Programmierer sind, werden Sie erstaunt sein, wie einfach Web Forms sind und wie einfach es ist, Webseiten zu schreiben, die für verschiedene Browsertypen gut funktionieren. Wenn Sie die .NET Framework lernen, werden Sie die unglaubliche Leistung des Frameworks zu schätzen wissen.

Aber was geschieht, wenn Sie C/C++ verwenden, um Native-Code-Anwendungen zu schreiben? Gibt es in Visual Studio .NET 2003 etwas für Sie? Sie wetten, dass es gibt. Zunächst können Sie engeren, schnelleren Code erhalten, indem Sie einfach neu kompilieren. Aber der C++-Compiler ist auch viel mehr Standards konform als je zuvor, was das Portieren von Code zu und von anderen Compilern erleichtert und Es Ihnen ermöglicht, Bibliotheken zu verwenden, die Sie zuvor nicht verwenden konnten. Weitere Informationen dazu finden Sie unter Neuerungen in Visual C++ .NET 2003.

Wir werden die Verwendung von Visual Studio und WebMatrix – nur für diese Spalte – überspringen, damit Sie lernen können, was Visual Studio und/oder Webmatrix für Sie tun, aber wir werden sie in Zukunft verwenden, da es so viel einfacher ist.

Was ist .NET?

Wie bereits erwähnt, ist es schwierig, den Finger genau darauf zu legen, was .NET ist und was zu keinem Zeitpunkt ist. Wenn Sie jedoch einige der wichtigsten motivierenden Kräfte hinter .NET verstehen, wird es viel einfacher, eine Vorstellung davon zu bekommen, was es ist.

Wie sich die Welt verändert hat

Betrachten Sie einige der Trends in unserer Branche. Viele Leute wechseln von der Verwendung isolierter PCs hin zur Verwendung von PCs und einer Vielzahl von Geräten, die gleichzeitig über das Internet, kabelgebunden und drahtlos, Baseband und Breitband mit mehreren Anwendungen verbunden sind. Sie erwarten, dass ihre wichtigen Informationen überall verfügbar sind, auf jedem Gerät, das sie verwenden, in einer für dieses Gerät geeigneten Form. Und da Informationen über das Internet verfügbar sind, möchten sie Rohdaten aus mehreren Quellen zu aussagekräftigen Informationen kombinieren können. Schließlich erwarten sie, software ohne den Aufwand von Installation und Upgrades verwenden zu können – und sie erwarten, dass dies viel zuverlässiger ist als PCs in der Vergangenheit.

Und das sind nur die Änderungen auf Clientcomputern. Das Internet hat dazu geführt, dass serverbasierte Anwendungen viel beliebter als je zuvor geworden sind, und das verbindungslose Anforderungs-/Antwort-Programmiermodell wurde allgemein verwendet. Aber die Kommunikation zwischen Servern – insbesondere unter denen, die auf verschiedenen Plattformen ausgeführt werden – ist schwierig, da die Unterschiede zwischen verschiedenen Browsern und Versionen von Browsern behandelt werden, nicht um alle verschiedenen Arten von drahtlosen Geräten zu Erwähnung. Und da die meisten umfangreichen Internetanwendungen datenbankzentriert sind, ist die Möglichkeit, problemlos auf eine Vielzahl von Datenquellen zuzugreifen, wichtiger denn je.

Wie .NET hilft

Die .NET Framework hilft, diese Art von Problemen einfacher zu lösen. Für instance wird the.NET Compact Framework (für Geräte) mit Visual Studio .NET 2003 ausgeliefert, sodass Sie die großartige Common Language Runtime in .NET auf einer Vielzahl von Geräten und nicht nur auf PCs nutzen können.

.NET ist von Grund auf so konzipiert, dass es gut mit dem Internet funktioniert, indem Internetstandards verwendet werden, einschließlich der Unterstützung von XML-Webdiensten, sodass Programme XML verwenden können, um problemlos Daten von mehreren Websites abzurufen und den Datenaustausch zwischen verschiedenen Computersystemen zu erleichtern. .NET erleichtert außerdem den Zugriff auf Ihre Daten und erleichtert das Schreiben von Webanwendungen, die auf einer Vielzahl von Browsern und Geräten gut ausgeführt werden können, ohne die Anwendung für jeden umschreiben zu müssen. Schließlich unterstützt die .NET-Runtime vereinfachte und zuverlässige Installationen und Upgrades, um die Benutzerfreundlichkeit und die Zuverlässigkeit zu erhöhen. Dies und die Sicherheits- und Versionsverwaltungsfeatures der .NET-Runtime erhöhen auch die Zuverlässigkeit und ermöglichen den Verkauf von Software als Dienst und nicht als Produkt.

Verwenden von XML-Webdiensten zum Integrieren von Daten aus mehreren Quellen in Informationen, die Sie verwenden können

Ein weiterer wichtiger Trend ist, dass Anwendungen Informationen aus vielen Quellen integrieren, um etwas Interessantes zu tun. Das kanonische Beispiel ist die Planung einer Geschäftsreise: Sie benötigen ein Flugticket, einen Mietwagen und ein Hotel. Sie sollten nach dem Deal suchen, der Ihren Anforderungen für jedes dieser Teile am besten entspricht, sodass Sie Daten von drei Gruppen unterschiedlicher Unternehmen benötigen. Ihre Reise muss aber auch koordiniert werden, damit Sie pünktlich ankommen, ein Auto und ein Hotelzimmer (natürlich mit Breitband) haben und rechtzeitig nach Hause kommen können. XML-Webdienste mit SOAP und XML-Standardschema unterstützen Anwendungen bei der Kommunikation über das Internet auf branchenüblicher Weise, sodass Ihre Anwendung Informationen verwenden und mit anderen Computern teilen kann, unabhängig davon, welche Plattform der andere Computer verwendet. Und die .NET Framework macht es fast trivial, Webdienste zu schreiben und zu verwenden. Wenn Sie jedoch ein ausgesprochen nicht triviales Beispiel für einen echten Webdienst sehen möchten, der mit .NET implementiert wurde, sehen Sie sich http://terraserver.microsoft.NET/an, das Karten- und Luftbildinformationen aus der ganzen Welt verfügbar macht, mit freundlicher Unterstützung des Microsoft TerraService-Projekts, sowie zusätzliche Informationen wie USA Census-Daten.

Und nicht zuletzt werden Microsoft und andere Unternehmen interessante Funktionen als XML-Webdienste bereitstellen, die Sie wie ein lokales Objekt verwenden können. Die Verwendung von OPWS (Other Personen's Web Services, einer Variante von SEC: Someone Else es Code) ist immer eine gute Sache, vorausgesetzt, Sie erhalten die benötigten Funktionen zu einem Preis, den Sie sich leisten können.

Die .NET Framework erleichtert das Schreiben neuer Arten von Anwendungen – Anwendungen, die einfacher zu installieren und zuverlässiger als je zuvor sind. Und diese Anwendungen werden leistungsfähig sein, da sie die Vorteile von XML-Webdiensten nutzen können, die von Microsoft und anderen bereitgestellt werden – vielleicht Sie!

Dr. GUI's Take on the .NET Framework

Ein kurzer Verlauf der Microsoft-Betriebssystem-API-Sätze

Die Programmierung mit dem .NET Framework unterscheidet sich von der Verwendung der Microsoft Win32-API®, ebenso wie sich die Programmierung für Windows stark von der Programmierung für DOS unterscheidet. Jede dieser APIs ist ein Produkt ihrer Zeit: die frühen 80er jahre für DOS, die Mitte der 80er für Windows und die späten 90er für .NET.

DOS

Die DOS-API geht konzeptionell auf die Designs verschiedener Single-Tasking-Betriebssysteme für kleine Computersysteme zurück. Obwohl Betriebssysteme wie UNIX und VMS auf Minicomputern zum Zeitpunkt der Ankunft von Mikrocomputern beliebt waren, verfügten Mikrocomputer nicht über genügend Arbeitsspeicher oder Geschwindigkeit, um diese relativ anspruchsvollen Betriebssysteme auszuführen. Aufgrund des extrem eingeschränkten Arbeitsspeichers und der Geschwindigkeit wurden Betriebssysteme wie DOS in erster Linie in Assemblysprache geschrieben, damit sie so schnell und klein wie möglich sein konnten. Bei der API für DOS handelte es sich in erster Linie um eine Reihe von Softwareunterbrechungsaufrufen (sie erinnern sich INT 21h, oder nicht?), für die Sie unbedingt eine Assemblysprache benötigten (z. B. mithilfe einer Laufzeitbibliothek, die zumindest teilweise in Assemblysprache geschrieben wurde), und die geringe Anzahl (einige Bewertungen) der bereitgestellten Dienste waren größtenteils auf Datenträger- und Zeichenmodus-E/A ausgerichtet. DOS unterstützte nur einzelne Aufgaben (und somit nur einen einzelnen Ausführungsthread), und DOS-Programme behalten jederzeit die Kontrolle über das Computersystem und fragten in einer Schleife ab, um zu sehen, ob die Tastatureingabe bereit war, wenn sie nicht etwas anderes ausführte.

Windows

Die Windows-API wurde in den frühen 80er Jahren entwickelt – zu einer Zeit, als Reagan Präsident war und C die Sprache der Wahl der meisten Systemprogrammierer war. (Einige wichtige Systeme wurden auch in Pascal geschrieben, was C in den Funktionen ziemlich ähnlich ist.) Stroustrups wegweisendes Die C++-Programmiersprache wurde erst 1986 veröffentlicht. "Strukturierte Programmierung" war die Wut zu dieser Zeit, als Programmierer lernten , zu gehen, und die objektorientierte Programmierung (OOP) sollte erst im folgenden Jahrzehnt zum Mainstream werden.

Daher war die Win32-API eine API, die nur ein C-Programmierer (oder Pascal) lieben konnte. Es gab nur einen Namespace, sodass alle Hunderten (und später Tausende) von API-Namen lang waren, und API-Autoren hatten verschiedene Namenskonventionen, um sie zu kategorisieren. Sprachen unterstützten abstrakte Datentypen nicht direkt, sodass Programmierer Benennungsschemas wie das ungarische Schema von Microsoft (von Charles Simonyi) vorkamen, das Bezeichnern eine Abkürzung vorangestellt hat, die den abstrakten Typ der Variablen darstellt (z. B. "i" für Index oder "c" für Anzahl – beide verwendeten den zugrunde liegenden Sprachtyp "int").

Der wichtigste Unterschied in Windows war jedoch, dass Sie ihr Programm komplett neu strukturieren mussten, um die grafische Benutzeroberfläche zu nutzen. Da Windows Multitasking unterstützt (obwohl kein Multithreading in Win16), musste Ihr Programm dem Betriebssystem die Kontrolle zurückgeben, wenn es nichts getan hat. Anstatt ihr Programm jederzeit die Kontrolle zu behalten, wurde es in eine Reihe von Nachrichtenhandlern umstrukturiert, von denen jeder schnell auf eine Nachricht (z. B. Mausklick, Tastenanschläge oder Menüauswahl) vom Betriebssystem reagierte und so bald wie möglich zum Betriebssystem zurückkehrte, damit Ihre Anwendung auf die nächste Nachricht warten konnte. Im Gegenzug für die Umstrukturierung Ihrer Anwendung konnten Sie umfassende Windows-Features wie Geräteunabhängigkeit, Unterstützung für Dynamic Link-Bibliotheken und Multitasking sowie leistungsstarke standardisierte Benutzeroberflächenfunktionen wie Fenster, Dialogfelder, Steuerelemente (z. B. Schaltflächen, Listenfelder und Bearbeitungssteuerelemente) und Menüs nutzen.

Objektorientiertes Programmieren

In den frühen 90er Jahren wurde die objektorientierte Programmierung populär. Mit der objektorientierten Programmierung war es möglich, größere Projekte mit besser definierten Interaktionen zwischen Objekten im Programm und weniger undefinierten Interaktionen zu schreiben. Und Objekte ermöglichten Programmierern eine leistungsstarke Möglichkeit, Abstraktionen zu erstellen, die die Programmierung höher machten als zuvor.

Visual Basic® hat einen Großteil der Nachrichtenroutinglogik in der Laufzeit gekapselt und Programmierern eine objektbasierte Möglichkeit für die Windows-Programmierung gegeben, indem sich Visual Basic-Programmierer auf das Schreiben von Nachrichtenverarbeitungsfunktionen konzentrieren können. Als C++ populär wurde, ermöglichten Klassenbibliotheken wie MFC Programmierern, ihre Windows-Anwendungen als Gruppen von interagierenden Objekten zu schreiben, wobei viele der Standardinteraktionen von einem Anwendungsframework bereitgestellt werden.

Die zugrunde liegenden Visual Basic- und MFC-Programme waren jedoch immer noch die gute Windows-API, die entwickelt wurde, bevor die objektorientierte Programmierung weit verbreitet wurde. (Um fair zu sein, sollte beachtet werden, dass Windows tatsächlich einige objektorientierte Konzepte verkörpert.) Die Größe der Visual Basic- und MFC-Laufzeitbibliotheken bezeugt jedoch, dass es immer mehr Aufwand erforderte, die Lücke zwischen objektorientierter Programmierung und dem alten, flachen API-Satz zu schließen.

Komponenten

Mitte der 90er Jahre wurde ein neues Konzept populär: Software könnte aus austauschbaren Komponenten konstruiert werden, so wie man ein Audiosystem oder Heimkino aus einer Reihe von Komponenten zusammenbauen konnte. Die Idee ist, dass Sie durch sorgfältige Definition von Schnittstellen und deren Implementierung gemäß klar definierten Verträgen Softwarekomponenten relativ einfach mischen und abgleichen können.

Die Unterstützung der komponentenbasierten Programmierung erforderte erhebliche Ergänzungen zu flachen API-Sätzen – in Windows, OLE und COM. Einige dieser Ergänzungen waren sehr kompliziert, da die C-basierten APIs nie dazu gedacht waren, Vorgänge wie die dynamische Erstellung von Softwareobjekten und die automatische Lebensdauerverwaltung von Objekten zu unterstützen – nicht um zu Erwähnung, dass C und C++ für das Schreiben monolithischer Anwendungen vorgesehen waren, keine Anwendungen, die aus einer Gruppe von Komponenten bestehen.

Daher war das Schreiben von Komponenten mühsam und erforderte Dateien und Übersetzer, um die Tatsache zu ersetzen, dass die Sprachen die komponentenbasierte Programmierung nicht wirklich unterstützten. Während Visual Basic und Bibliotheken wie ATL einen Teil des Tediums entlasten, waren viele erweiterte (aber interessante) Vorgänge immer noch ziemlich schwierig. Und neue Versionen von Komponenten führten häufig dazu, dass vorhandene Anwendungen aufgrund fehlender Unterstützung in Windows für flexible Versionsverwaltungsrichtlinien unterbrochen wurden.

So viel Funktionalität, so wenig gemeinsam

Schließlich führte die Tatsache, dass windows im Laufe der Jahre verschiedene APIs hinzugefügt wurden, zu großen Inkonsistenzen im Programmiermodell. Selbst bei der ursprünglichen Windows-API gab es einige inkonsistenzen– sehen Sie sich an, wie unterschiedlich Fenster, Menüs und Steuerelemente im Vergleich zu Gerätekontexten, Stiften, Schriftarten und Pinsel behandelt werden. Aber das schwerwiegendere Problem ist, dass es wahrscheinlich ein halbes Dutzend verschiedene Möglichkeiten gibt, Fehler in Windows zu behandeln. (Vielleicht mehr – Dr. GUI hat nicht gezählt.) Es gibt wahrscheinlich ein halbes Dutzend Zeichenfolgentypen. Und das ist nur die Spitze des Eisbergs.

Zwischen dem Sammelsurge der API-Programmiermodelle und der Notwendigkeit, komponentenbasierte Programme und internetbasierte Programmierung zu unterstützen, ist die Zeit reif für eine neue, sauber gestaltete, konsistente und moderne API. Die Antwort von Microsoft auf diese Probleme ist die .NET Framework.

Ein neuer Start, ohne von vorn zu beginnen: die .NET-Runtime

So wie es in den späten 80er Jahren an der Zeit war, einen Bruch mit den alten DOS-Methoden zu machen, Programme zu schreiben (Was? Geben Sie meine TSRs auf?), ist es jetzt an der Zeit, dass Windows-Programmierer eine Pause von der Verwendung der flachen, altmodisch eingerichteten Windows-API zugunsten einer modernen, objektorientierten, komponentenbasierten API machen. Dr. GUI empfiehlt die Verwendung der .NET Framework und Runtime, damit Sie die Vorteile einer modernen Runtime nutzen können.

Komponentenbasiert für den Kern

Um die .NET-Runtime zu verstehen, müssen Sie folgendes verstehen: Die .NET-Runtime wurde entwickelt, um erstklassige Unterstützung für die moderne komponentenbasierte Programmierung zu bieten – direkt in der Runtime. Anders ausgedrückt: Es geht um Komponenten. Wenn Sie dies verstehen, wird es viel einfacher zu verstehen, warum die .NET-Runtime so konzipiert ist, wie sie ist.

Ebenso wie Windows die direkte Unterstützung für Fenster, Steuerelemente, Zeichnung und Menüs sowie die Infrastruktur für nachrichtenbasierte Programmierung und Abstraktionen zur Unterstützung der Geräteunabhängigkeit hinzugefügt hat, unterstützt die .NET-Runtime Komponenten (einschließlich Eigenschaften und Ereignisse), Objekte, Vererbung, Polymorphie und Schnittstellen direkt.

Mehrsprachige, interagiert mit Legacycode!

Und es bietet diese Unterstützung, während Sie eine von mehr als 20 verschiedenen Programmiersprachen verwenden können, während Sie weiterhin mit non-.NET Code interagieren, unabhängig davon, ob auf Ihrem Computer oder auf einem anderen Computer ausgeführt wird. Anders ausgedrückt: .NET stellt einen neuen, modernen Start dar, ohne neu anfangen zu müssen: Sie können eine Vielzahl von Sprachen verwenden, von vertraut bis exotisch, und Ihre alten Komponenten und DLLs ohne Änderungen verwenden. Sie können sogar .NET-Komponenten wie jedes COM-Objekt verwenden, sodass Ihr neuer .NET-Code mit alten COM-Anwendungen verwendet werden kann. (Möglicherweise möchten Sie diese Sprachflexibilität und die einfache Interoperabilität mit Legacycode mit anderen Laufzeitsystemen auf dem Markt vergleichen, insbesondere mit Brand J.)

Neue Features zur Unterstützung von Komponenten

Die anderen wichtigen Features, die in der .NET-Runtime von Interesse sind, sind so konzipiert, dass sie erstklassige Unterstützung für die Komponentenentwicklung bieten. Die direkte Unterstützung für Eigenschaften und Ereignisse erleichtert die komponentenbasierte Programmierung, ohne dass spezielle Schnittstellen und Adapterentwurfsmuster erforderlich sind. Die automatische Speicherverwaltung behandelt knifflige Probleme mit der Objektlebensdauer, indem Sie Objekte zuordnen und zwischen Komponenten übergeben können, ohne sich Gedanken darüber machen zu müssen, welche Komponente für die Freigabe des Objekts verantwortlich ist, wenn es nicht mehr benötigt wird. Die Serialisierungsunterstützung ermöglicht das "Gefriertrocknen" von Komponenten in einer Vielzahl von Formaten, einschließlich branchenüblicher XML-basiertem SOAP (nicht nur ein proprietäres Binärformat), und sie später wiederhergestellt. Die Möglichkeit, XML-Webdienste nach Branchenstandard aufzurufen und zu erstellen, ermöglicht es Ihnen, Komponenten für jeden verfügbar zu machen, der ein beliebiges Gerät überall im Internet verwendet, und Komponenten von jedem Gerät aus überall im Internet zu verwenden. Ausnahmen bieten eine stabile und konsistente Methode zur Behandlung von Fehlerbedingungen. Die Tatsache, dass jedes Codemodul über integrierte vollständige Metadaten verfügt, bedeutet, dass Funktionen wie dynamische Erstellung und Methodenaufruf einfach und typsicher werden. (Heck, die .NET Framework ermöglicht es Ihnen sogar, Code direkt zu erstellen und auszuführen!) Außerdem können Sie steuern, welche Versionen von Komponenten Ihre Anwendung verwendet, um Ihre Anwendungen zuverlässiger zu machen. Schließlich bedeutet die Tatsache, dass sich der Code in einer prozessorunabhängigen und leicht zu überprüfenden Zwischensprache (IL) befindet und nicht in einer bestimmten Computersprache, nicht nur, dass Ihre Komponenten auf einer Vielzahl von Computern ausgeführt werden können, sondern auch, dass Sie sicher sein können, dass Ihre Komponenten nicht den Arbeitsspeicher überschreiben, den sie nicht besitzen, und möglicherweise zu einem Absturz führen.

Jedes dieser wichtigen Features befindet sich in der .NET-Runtime, sodass es einfach ist, robuste objektorientierte Komponenten zu schreiben.

Aber warten Sie ... es gibt noch mehr!

Zusätzlich zu allen großartigen Komponentenunterstützungsfeatures, die von der .NET-Runtime bereitgestellt werden, enthält die .NET Framework eine große Anzahl von Klassen, die entwickelt wurden, um die Infrastruktur zur Lösung der heutigen Programmierprobleme bereitzustellen– einschließlich komplexer komponentenbasierter Webserveranwendungsunterstützung, die mit ASP.NET (und unterstützt eine Vielzahl von Browsern und mobilen Geräten als Clients), XML-Unterstützung, verbesserter Datenbankzugriff und vieles mehr.

Außerdem stehen Teile der .NET Framework für eine Vielzahl von Geräten in .NET Compact Framework zur Verfügung. Das Erlernen der .NET Framework für PCs und Server zahlt sich also aus, wenn Sie Geräte programmieren müssen.

Und standardisiert...

Schließlich wurde ein großer Teil der .NET-Runtime, die Common Language Infrastructure (CLI), zusammen mit der C#-Sprache und dem IL-Format von der European Computer Manufacturers Association (ECMA) – der Gruppe, die JavaScript und JScript standardisiert hat (http://www.ecma-international.org/publications/standards/ECMA-262.HTM) – und von der ISO (International Organization for Standardization) standardisiert. Dadurch können andere Organisationen kompatible .NET-Implementierungen auf anderen Plattformen durchführen. Weitere Informationen finden Sie unter ECMA und ISO/IEC C# und Common Language Infrastructure Standards .

Außerdem ist es erwähnenswert, dass Ximian, ein Open-Source-Softwareunternehmen, ein Open-Source-Projekt namens Mono (http://www.go-mono.com/) sponsert, das an einer Open-Source-Version des .NET Framework arbeitet. Vielleicht finden Sie Dare Obasanjos Interview mit Miguel de Icaza, Leiter des Mono-Projekts, interessant.

Programm für die .NET Framework mit einem unglaublichen Tool: Visual Studio .NET

Die .NET Framework ist nicht nur wunderbar, sondern wenn Sie Visual Studio .NET zum Entwickeln Ihrer Anwendung verwenden, erhalten Sie eine äußerst leistungsstarke Entwicklungsumgebung, die alles, was Sie benötigen, zur Hand hat. Die Dokumentation ist direkt in die integrierte Entwicklungsumgebung (Integrated Development Environment, IDE) von Visual Studio integriert, einschließlich der dynamischen Hilfe, die überwacht, was Sie eingeben und klicken, und erraten, welche Hilfethemen für Ihre Arbeit relevant sind. Wenn es richtig ist (und es häufig ist), ist die Hilfe, die Sie benötigen, nur einen Klick entfernt.

Microsoft IntelliSense® unterstützt Sie bei der korrekten Eingabe von Anweisungen, Variablennamen und Membernamen und zeigt Ihnen sogar die Namen der Parameter der Methoden an, die Sie aufrufen. (Dies erfolgt sowohl für die Klassen, die Sie schreiben, als auch für die klassen in der Bibliothek.) Dies macht das Bearbeiten von Quellcode viel einfacher, schneller und weniger fehleranfällig.

Und es gibt auch viele andere großartige Features – Visual Studio .NET ist wirklich eine sehr angenehme Möglichkeit, zu programmieren – und auch produktiv!

Warum lernen Sie die .NET Framework?

Sie fragen sich vielleicht, wenn Sie bereits für eine andere Plattform wie Windows, Linux oder Java programmieren, warum Sie sich die Mühe machen würden, eine neue Plattform zu lernen: die .NET Framework.

Dr. GUI sieht dies so: Da die .NET Framework eine Plattform ist, die Programmierern sehr produktiv sein kann – es ist wahrscheinlich die produktivste der genannten Plattformen –, wäre es dumm, es nicht zu lernen. Es ist nicht die beste Plattform für JEDES Projekt (keine Plattform ist), aber der gute Arzt glaubt, dass Sie es die beste Plattform für VIELE Ihrer Projekte finden werden. (Und da es gut mit anderen Plattformen interagiert, sollten Sie die Teile Ihres Projekts ausführen, die für die .NET Framework im .NET Framework sinnvoll sind, und für den Rest Ihrer Projekte zusammenarbeiten, sei es mit nativem Code, COM-Objekten oder anderen Computersystemen.

Und für einige Arten von Anwendungen ist die .NET Framework der offensichtliche Weg. Webanwendungen sind mit ASP.NET sehr einfach und leistungsstark. Und XML-Webdienste lassen sich auch mit dem .NET Framework sehr einfach schreiben.

Wenn Sie bereits die .NET Framework lernen möchten, weil Sie es für ein Projekt benötigen, lesen Sie weiter– Dr. GUI hilft Ihnen. Aber wenn Sie sich nicht sicher sind, lesen Sie auch weiter. Für einen relativ geringen Zeitaufwand hilft Ihnen Dr. GUI, ein gutes Verständnis einer Plattform zu erlangen, die Sie wahrscheinlich verwenden möchten. (Und selbst wenn Sie dies nicht tun, hilft Ihnen das Lernen mit Ihrer anderen Programmierung, genauso wie das Erlernen einer Fremdsprache ihnen hilft, Ihre Muttersprache besser zu verstehen.)

Ddr. GUI's Prescription: Übung mit .NET für nur eine Stunde pro Woche...

... und aufbaut starke Programmiermuskeln

Da .NET relativ neu ist, schlägt Dr. GUI vor, dass Sie der Kurve voraus sind: Suchen Sie nur eine Stunde pro Woche, um mehr über .NET zu erfahren.

Diese Tutorialartikel werden zweimal im Monat veröffentlicht und enthalten Übungen, mit denen Sie tatsächlich lernen können, worüber Sie lesen. Angenommen, es dauert eine Stunde, um den Artikel zu lesen (nachfolgende Artikel werden kürzer sein, Dr. GUI verspricht, und wird wahrscheinlich weniger Zeit als das dauern) und ein oder zwei Stunden, um die Übungen zu machen, sollten Sie in der Lage sein, etwas über eine großartige neue Technologie mit relativ wenig Aufwand zu lernen - ein Durchschnitt von etwa einer Stunde pro Woche.

Wenn Sie eine Stunde pro Woche widmen, erhalten Sie fundierte Kenntnisse der .NET Framework. Sie werden verstehen, wie dies funktioniert, und sie können bequem für die .NET-Plattform programmieren.

Machen Sie es mit einem Freund (oder zwei, oder mehr ...)

Genau wie ein Trainingspartner Ihnen bei Ihrer Technik helfen kann, nicht Um Ihr Engagement zu Erwähnung, wird es Ihnen helfen, mit einem Freund oder Kollegen dr. GUI .NET jedes Mal mit Ihnen zu lernen – und mehr Spaß zu haben. Oder, noch besser, eine Gruppe von Personen zusammen zu bekommen. Vielleicht möchten Sie eine Diskussionsgruppe haben. Oder vielleicht senden Sie einfach eine E-Mail aneinander, wenn Sie mit den einzelnen Übungen fertig sind – oder wenn Sie nicht mehr weiter sind und Fragen haben.

Im Dr. GUI .NET-Forum auf GotDotNet

Es gibt auch ein neues Forum auf GotDotNet, das dieser Spalte unter http://gotdotnet.com/community/messageboard/MessageBoard.aspx?id=46zugeordnet ist.

Der gute Arzt kann Ihre .NET Framework Programmierfragen im Forum nicht beantworten, aber er wird Ihre Fragen zu diesen Spalten beantworten.

Kostenlos starten

Und vergessen Sie nicht, dass Sie das .NET Framework SDK von MSDN erhalten können, einschließlich der Compiler, die Sie benötigen, und sogar einen Debugger, kostenlos. Es ist eine großartige Möglichkeit, ihre Füße nass zu machen. Dr. GUI ist ziemlich sicher, dass Sie bald eine Kopie von Visual Studio .NET erhalten möchten, jedoch für die coole IDE, das Hilfesystem und den Debugger, nicht um die IntelliSense-Features zu Erwähnung.

Worüber werden wir diskutieren?

Angesichts der Weite der .NET Framework fragen Sie sich vielleicht, was wir wann besprechen werden?

Wir beginnen diese Spalte mit den Grundlagen. Sie haben bereits erfahren, welche Probleme der .NET Framework lösen soll. Als Nächstes werden verschiedene Aspekte der .NET-Runtime erläutert, einschließlich des obligatorischen "Hallo Welt"-Programms, und es wird eine Einführung in Metadaten und die Intermediate Language (IL) – die Computersprache von .NET – bereitgestellt.

Beim nächsten Mal beginnen wir mit den Grundlagen der .NET Framework, einschließlich der Mutter aller Klassen, System.Object. Wir werden auch über Garbage Collection und ein wenig über Schnittstellen sprechen.

Danach beschäftigen wir uns in mehreren Artikeln mit den Grundlagen der .NET Framework und der Laufzeit: Datentypen, Ausnahmen, Datei- und Netzwerk-E/A, Serialisierung, Threading und Timer sowie Debuggen.

Dann arbeiten wir an etwas, das Windows-Programmierern am herzen liegt: die grafischen Benutzeroberflächenklassen. (Dies wird wahrscheinlich für ASP.NET Programmierer nicht so interessant sein.)

Im .NET Framework für Datenbankzugriff, XML und Webanwendungen gibt es viele großartige Features, aber der gute Arzt plant derzeit, diese Probleme von anderen behandeln zu lassen.

Jede Spalte enthält ein Beispielprogramm, eine Erklärung des Beispiels und Übungen, die Sie ausprobieren können. Die Beispiele, die alle in C# und Visual Basic .NET (einschließlich ASP.NET Versionen mit Visual Basic .NET) geschrieben wurden, konzentrieren sich auf die Erläuterung größerer Konzepte, damit Sie die Entwurfsphilosophie hinter .NET besser verstehen können.

Gründe für C# und Visual Basic .NET

Warum, wenn .NET etwa 20 Sprachen unterstützt, verwenden alle Dr. GUI-Spalten zu .NET nur C# und Visual Basic .NET? Nun, zunächst verwendeten die Betaversionen der Dr. GUI .NET-Spalten nur C#. Zu der Zeit, als der gute Arzt die Spalte begann, war C# die offensichtliche Wahl. Hier ist der Grund: Ein Großteil der .NET Framework ist in C# geschrieben, sodass die meisten der ersten Beispiele auch in C# enthalten sind. Es schien einfach wie der offensichtliche Weg zu dieser Zeit. (Vergessen Sie nicht, dass Dr. GUI auch ein C++-Typ ist.)

Heutzutage ist Visual Basic .NET jedoch fast genauso leistungsfähig wie C# (es gibt einige Features in jedem, die nicht in den anderen enthalten sind), daher ist es eine ebenso gute Wahl für die .NET-Programmierung – und heute ist es offensichtlich, dass Dr. GUI .NET beide Sprachen verwenden sollte. Daher hat der gute Arzt (mit Hilfe von Duncan Mackenzie, Autor von Coding4Fun – danke, Duncan!) sowohl C#- als auch Visual Basic .NET-Beispiele in den Spalten.

Aber warten Sie ... es gibt noch mehr! Um diese Spalten für Ihre ASP- und ASP.NET-Programmierer relevant zu machen, enthält Dr. GUI auch Beispiele in ASP.NET, wobei Visual Basic .NET verwendet wird. Sie werden nicht lernen, ein großartiger ASP.NET Programmierer aus diesen Spalten zu sein (es gibt viel bessere Orte wie https://asp.net/, um daran zu arbeiten), aber Sie werden lernen, die volle und intelligente Leistung der .NET Framework in Ihren ASP.NET Programmen zu nutzen, was Sie zu einem besseren Programmierer macht, da Sie Ihre Tools besser verstehen. Und wenn Sie derzeit kein ASP.NET Programmierer sind, erhalten Sie einen Vorgeschmack darauf, wie einfach und leistungsstark ASP.NET ist.

Während Sie in .NET in vielen Sprachen programmieren können, wurden C# und Visual Basic .NET speziell entwickelt, um gut mit .NET zu arbeiten und die komponentenbasierte Programmierung zu unterstützen. Und beides sind hervorragende Programmiersprachen – insbesondere bei Verwendung von Visual Studio. Sie sind einfach zu bedienen, aber mit keinem der lästigen Probleme von Brand J. Für instance können Sie tatsächlich eine Swapfunktion in C# und Visual Basic .NET schreiben, wie weiter unten in dieser Spalte gezeigt wird. (Nicht in der Lage zu sein, dies in Brand J zu tun, ist eine der Pet Peeves von Dr. GUI über diese Sprache.)

Dr. GUI glaubt, dass C# und Visual Basic .NET wahrscheinlich die beliebtesten Sprachen für .NET Framework Programmierung sein werden. Welche Option sollten Sie verwenden? Je nachdem, was Sie bevorzugen. Außerdem haben Sie mit C# und Visual Basic .NET die Möglichkeit, beide Sprachen sowie .NET zu erlernen. Wenn Sie sich für die Verwendung einer anderen Sprache entscheiden, schadet das Anzeigen von Beispielen in diesen Sprachen nicht. was Sie über die .NET Framework und Runtime erfahren, gilt für jede Sprache, die Sie verwenden.

Wenn Sie lieber eine andere Sprache verwenden möchten, ist es ein relativ einfacher Prozess, den Code in die Sprache Ihrer Wahl zu übersetzen. Aber Dr. GUI, nur ein Typ, hat nicht die Zeit, dies zu tun. Wenn einer von Ihnen dies übernehmen möchte, können Sie Ihre Übersetzungen in der Newsgroup belassen, die eingerichtet wurde, um diese Spalten zu besprechen. (Dazu später mehr.)

Ich verwende Jetzt Visual Basic. Gründe für die Verwendung von Visual Basic .NET anstelle von C#

Dr. GUI hat von einer Reihe von Microsoft Visual Basic-Programmierern gehört, die erwägen, zu einer anderen Sprache als Visual Basic .NET zu wechseln, z. B. C#, wenn sie zu .NET wechseln. Der gute Arzt möchte sie bitten, dies zu überdenken, bevor sie dies tun.

Zu den Gründen, die er gehört hat, gehören Dinge wie: "Da Sich Visual Basic stark ändert, kann ich auch eine neue, leistungsfähigere Sprache lernen."

Wenn es wahr wäre, dass andere Sprachen leistungsfähiger sind als Visual Basic .NET, könnte dies sinnvoll sein. Die Beziehung von Visual Basic .NET zum .NET Framework ähnelt jedoch nicht der Beziehung von Visual Basic zu Windows. Im Allgemeinen haben .NET-Sprachen gleiche Wettbewerbsbedingungen und sind mehr oder weniger gleich leistungsfähig. Die Unterschiede sind gering.

Denken Sie daran, dass Visual Basic für Windows eine schwergewichtige Laufzeitbibliothek für die Schnittstelle mit Windows erfordert. Daher unterscheidet sich die Visual Basic-Programmierung in vielerlei Hinsicht stark von der Windows-Programmierung in C oder C++. Das ist oft eine gute Sache, da Windows ziemlich kompliziert ist – die Visual Basic-Programmierung ist viel einfacher. Das Problem besteht darin, dass Visual Basic für Windows mehr oder weniger darauf beschränkt ist, das zu tun, was die Designer der Laufzeitbibliothek beim Entwerfen der Runtime im Kopf hatten. Wenn Sie Dinge tun möchten, für die sie nicht geplant haben, kann es sehr schwierig sein – manchmal fast unmöglich. (Bei Computern ist nichts unmöglich.)

Visual Basic .NET hingegen spricht direkt mit dem .NET Framework, genau wie jede andere .NET-Sprache. (Es gibt eine kleine Visual Basic .NET-Runtime, die einige Visual Basic-spezifische Funktionen bereitstellt, die sich nicht im .NET Framework befinden. Aber es ist nichts wie die alte Runtime.)

Mit anderen Worten: Visual Basic .NET bietet Ihnen zum ersten Mal die volle Leistungsfähigkeit der zugrunde liegenden Plattform. Es gibt fast nichts, was Sie in C# tun können, was Sie in Visual Basic .NET nicht tun können. Nun gibt es einige Unterschiede bei den Sprachfeatures – jede Sprache verfügt über einen kleinen Satz von Features, die die andere nicht hat. Diese Unterschiede sind jedoch minimal.

Für instance, da Visual Basic .NET die späte Bindung direkt unterstützt, ist dies in Visual Basic .NET viel einfacher als in anderen Sprachen. Und Visual Basic .NET verdrahtet Ereignisse automatisch mit ordnungsgemäß benannten Ereignisbehandlungsmethoden, wodurch Sie Code sparen, der in anderen Sprachen erforderlich ist.

Auf der anderen Seite ermöglicht C# das Schreiben von "unsicherem" verwaltetem Code (genauer gesagt Code, der nicht als typsicher überprüft werden kann), der Zeiger ähnlich wie C und C++ bearbeitet. Mit C++ mit den verwalteten Erweiterungen für C++ können Sie z. B. verwalteten und nicht verwalteten Code kombinieren. Aber dies sind Dinge, die Sie aus sehr spezifischen Leistungsgründen tun möchten, nicht in der alltäglichen Programmierung.

Aber Sie müssen nicht für alles eine Sprache auswählen: Mit den hervorragenden Funktionen des .NET Framework können Sie nur die Teile Ihres Programms schreiben, die C++ oder C# in diesen Sprachen benötigen, und den Rest in der Sprache Ihrer Wahl erledigen.

Der Schlüssel ist folgendes: Wenn Sie bereits Visual Basic-Programmierer sind, müssen Sie keine völlig neue Sprache lernen, nur um die .NET Framework zu nutzen. Stattdessen können Sie die Unterschiede zwischen Visual Basic 6.0 und Visual Basic .NET kennenlernen und sich darauf konzentrieren, die .NET Framework gut zu erlernen, einschließlich Vererbung und Ausnahmen. Sie können alles tun, was ein C#-Programmierer tun kann. Und wenn Sie sich später entscheiden, C# zu lernen, wird fast alles, was Sie mit Visual Basic .NET gelernt haben, direkt nach C# übertragen. (Dr. GUI vermutet, dass Programmierer, die sowohl Visual Basic .NET als auch C# kennen, höhere Gehälter erhalten werden als diejenigen, die nur das eine oder das andere kennen, so wie im realen Leben zweisprachig zu sein gut ist.)

Daher empfiehlt Dr. GUI Folgendes:

  • Wenn Sie jetzt hauptsächlich in Visual Basic programmieren, lernen Sie Visual Basic .NET und die .NET Framework. Wenn Sie möchten, können Sie C# später in Ruhe lernen. Fast alles, was Sie in Visual Basic .NET lernen, gilt für C#.
  • Wenn Sie hauptsächlich in C, C++ oder Brand J programmieren, lernen Sie C# und die .NET Framework. (Sie können sich auch an C++ oder J# halten, wenn Sie möchten.) Wenn Sie Ihr Gehalt erhöhen möchten, lernen Sie später andere Sprachen wie Visual Basic .NET.
  • Wenn Sie mit viel nicht verwaltetem C/C++-Code zusammenarbeiten müssen oder wenn Sie jede Unze Leistung benötigen, verwenden Sie die Managed Extensions for C++ für den Code, der wirklich schnell sein muss, und C# für den Rest.
  • Wenn Sie hauptsächlich in Microsoft Jscript® oder JavaScript programmieren, lernen Sie Jscript .NET und die .NET Framework und verzweigen Sie nach Bedarf in andere Sprachen.
  • Wenn Sie ein Projekt verwalten, wählen Sie die Sprache aus, die Ihrem Team die geringste Trauer bereitet. Und fühlen Sie sich frei, eine andere Sprache für Teile des Problems zu verwenden, die es erfordern.

Mit anderen Worten, es spielt keine Rolle , welche Sprache Sie verwenden. Sie können alles im .NET Framework in jeder Sprache tun. Unterschiedliche Sprachfeatures erleichtern natürlich einige Aufgaben in einigen Sprachen als in anderen. Für instance bietet Visual Basic .NET, wie bereits erwähnt, automatische späte Bindung. Sie müssen einige Codezeilen schreiben, damit eine späte Bindung in C# erfolgt. Deshalb ist es cool, Sprachen so einfach mischen zu können!

Verwenden Sie also zunächst die Sprache, mit der Sie vertraut sind, und verzweigen Sie dann, wenn Sie zeit- und neigungsbereit sind.

Oder lernen Sie eine neue Sprache, wenn Sie möchten. Es liegt wirklich an Ihnen. Wissen Sie nur, dass Sie keine neue Sprache lernen müssen, nur um die volle Leistungsfähigkeit der .NET Framework zu nutzen.

Installationshinweise

Die installation ist größtenteils sehr einfach – klicken Sie einfach auf das entsprechende Setupprogramm oder die entsprechende URL, und los geht's. Die Setupprogramme sind sowohl leicht verständlich als auch effektiv. (Stellen Sie sicher, dass Sie Microsoft® Internet Information Services [IIS] vor der Installation aktivieren, wenn Sie ASP.NET verwenden möchten.)

Es gibt jedoch einen kleinen Trick: Während Sie das .NET Framework SDK installieren, werden Sie möglicherweise gefragt, ob Sie Umgebungsvariablen registrieren sollen, damit Sie über die Befehlszeile erstellen können. Sie möchten dies tun, damit Sie Tools über die Befehlszeile verwenden können. Stellen Sie sicher, dass das Kontrollkästchen aktiviert ist, damit Sie die Umgebungsvariablen registrieren und die Befehlszeilentools verwenden können.

Wenn Sie Visual Studio .NET installieren, haben Sie keine Möglichkeit, dieses Feld auszuwählen. Starten Sie stattdessen Die Eingabeaufforderung mit der Visual Studio .NET 2003-Eingabeaufforderungsverknüpfung , die Sie im Startmenü unter Microsoft Visual Studio .NET 2003\Visual Studio .NET Tools finden. Wenn Sie diese Verknüpfung zum Abrufen einer Eingabeaufforderung verwenden, wird der Pfad ordnungsgemäß festgelegt.

Stellen Sie außerdem sicher, dass Sie während der Installation keine Programme wie Microsoft® Internet Explorer oder Microsoft Outlook® starten. Dr. GUI tat dies und musste seine Installation reparieren. Warten Sie einfach, bis Sie Ihre E-Mail erhalten, bis die Installation von Visual Studio .NET 2003 abgeschlossen ist, okay?

Schreiben von Programmen für .NET

Visual Studio .NET wurde entwickelt, um die .NET-Programmierung noch einfacher zu machen, als es sonst der Fall wäre. Features wie automatische Vervollständigung von Anweisungen und Die Bearbeitung von Drag-and-Drop-Formularen erleichtern die Verwendung eines unbekannten API-Sets erheblich. Und die Integration von Hilfe in die IDE macht die Dinge viel schöner.

Wir werden in Zukunft Visual Studio .NET verwenden, aber für diese Spalte möchte nur der gute Arzt, dass Sie Dinge auf die altmodische Weise tun, auch wenn Sie Visual Studio .NET haben: Schreiben Sie Ihre Quelldatei mit Editor (oder einem anderen Editor, z. B. Visual Studio, wenn Sie möchten), speichern Sie sie auf dem Datenträger, und kompilieren Sie sie dann über die Befehlszeile, und führen Sie sie aus der Befehlszeile aus. (Kopieren Sie für die ASP.NET Anwendungen den Code in das entsprechende Webanwendungsverzeichnis, und verwenden Sie internet Explorer, um die Seite anzuzeigen.) Dies erfordert nur das .NET SDK, nicht Visual Studio .NET. Die Verwendung der Befehlszeilentools bietet uns auch die Möglichkeit, zu sehen, welche Dateien erstellt werden, und zu sehen, was unter den Covern vor sich geht.

Wie würden Sie das buchstabieren?

Die Konventionen für die Verwendung von Groß- und Kleinbuchstaben in .NET-Programmen unterscheiden sich möglicherweise von anderen Sprachen, die Sie verwendet haben. Die Regeln für .NET sind jedoch einfach: Für alle Bezeichner außer Parameternamen und privaten Feldnamen müssen Sie den ersten Buchstaben jedes Worts großschreiben, einschließlich des ersten. Dies wird nach der unter Pascal-Programmierern üblichen Konvention als "Pascal-Casing" bezeichnet.

Für Parameternamen und private Feldnamen müssen Sie den ersten Buchstaben jedes Worts mit Ausnahme des ersten Großbuchstabens großschreiben. (Microsoft empfiehlt, dass alle Felder privat sind; sie können jedoch mit einer geschützten oder öffentlichen Eigenschaft verfügbar gemacht werden.) Dies wird als "Kamelgehäuse" bezeichnet. Dr. GUI ist sich nicht ganz sicher, warum.

Sie müssen diese Regeln wirklich kennen, da die .NET Framework Namen diesen entsprechen und in einigen Sprachen, z. B. C#, die Groß-/Kleinschreibung beachtet wird.

Daher lautet der Name der Standard Ausgabefunktion System.Console.WriteLine mit genau dieser Großschreibung. Der Name des Formatzeichenfolgenparameters für System.Console.WriteLine kann formatString und nicht FormatString sein. Der Name der length-Eigenschaft einer Zeichenfolge kann jedoch StrLen und nicht strLen sein.

Für Dr. GUI ist es am schwierigsten zu merken, Main zu verwenden, nichtStandard.

Hallo Welt .NET in C# und Visual Basic .NET

Hier ist also ohne weitere Umschweife die einfachste mögliche "Hallo Welt" in C# für .NET:

C#

// Compile with: csc hellocs.cs
class MyApp {
   public static void Main() {
      System.Console.WriteLine("Hello, world! (from C#)");
   }
}

... Und hier ist der Code in Visual Basic .NET:

Visual Basic .NET

' Compile with: vbc hellovb.vb
Class MyApp
   Public Shared Sub Main()
      System.Console.WriteLine("Hello, world! " + _
         "(from Visual Basic .NET)")
   End Sub
End Class

Ausführen der Programme

Um diese Programme auszuführen, erstellen Sie einfach die Textdatei mit dem Code (oder rufen Sie aus der Newsgroup ab), und kompilieren Sie dann mithilfe der im Code angezeigten Befehlszeile. (Führen Sie sdkvars.bat im Verzeichnis \bin des Framework SDK [C:\Programme\Microsoft Visual Studio .NET 2003\SDK\v1.1\Bin auf dem Computer der Dr. GUI] aus, falls erforderlich, um den Pfad so festzulegen, dass der Compiler funktioniert.)

Geben Sie dann den Namen des Programms ein, um es auszuführen. Wenn Sie beispielsweise die Dateien erstellt haben, können Sie eine der folgenden Eingaben ausführen:

   rem C#
   csc hellocs.cs
   hellocs

   rem VB .NET
   vbc hellovb.vb
   hellovb

Alles ist in einer Klasse

Das erste, was Sie wahrscheinlich bemerken werden, ist, dass die Main-Funktion ein Mitglied einer Klasse ist.

In .NET müssen alle Methoden Member einer Klasse oder Struktur sein. (Wir werden beim nächsten Mal mehr über Strukturen sprechen.) Das liegt daran, dass die grundlegende Einheit von organization in .NET ein Typ ist (ein Typ ist unter anderem eine Klasse oder Struktur). Mit den verwalteten C++-Erweiterungen für Visual C++ .NET können Sie Variablen und Funktionen außerhalb einer Klasse schreiben, aber auch diese befinden sich in einer Klasse: einer impliziten globalen Klasse.

Look Ma! Keine Header!

Nicht nur ist alles in einer Klasse, sondern auch die Klassendeklarationen sind vollständig. Außer der Quelldatei gibt es keine Headerdateien, IDL-Dateien oder andere Dateien. Alles, was Sie zum Beschreiben der Klasse benötigen, ist mit der -Klasse.

Was geschieht also, wenn Sie eine andere Klasse verwenden, die sich nicht in Ihrer Quelldatei befindet? Woher weiß der Compiler, was in dieser Klasse enthalten ist?

Die Antwort ist, dass der Compiler die Metadaten der Assembly liest, die die von Ihnen verwendete Klasse enthält. Das gerade gezeigte Programm verwendet System.Object implizit (da alle Klassen von System.Object abgeleitet sind). Der Compiler wechselt automatisch zur mscorlib.dll Assembly, um die Metadaten für diese Assembly abzurufen, damit er die Typinformationen abrufen kann, die er für System.Object benötigt. Wenn Sie Klassen aus verschiedenen Assemblys verwenden, verwenden Sie die Option /r in der Compilerbefehlszeile, um die Assembly anzugeben, z. B.:

   rem C#
   csc /r:foo.dll hellocs.cs

   rem VB .NET
   vbc /r:foo.dll hellovb.vb

Übrigens ist ein Modul (*NICHT* identisch mit dem Modul in Visual Basic .NET!) eine ausführbare Datei – entweder eine Anwendung oder eine Bibliothek. Seine Erweiterung ist in der Regel .exe oder .dll. Eine Assembly ist eine Gruppe von mindestens einem Modul. Eine Datei in der Assembly enthält das Manifest der Assembly oder eine Liste mit Dateien in dieser Assembly. Eine Assembly ist die kleinste Einheit ausführbaren Codes, die bereitgestellt und versioniert werden kann. (Wenn Sie sich das Manifest für eine Assembly später ansehen, müssen Sie feststellen, dass nur Assemblys Versionsnummern haben.)

Main ist etwas Besonderes

Als Nächstes werden Sie wahrscheinlich die Modifizierer auf Main bemerken: öffentlich und statisch (Freigegeben in Visual Basic .NET). Die Standardzugriffssteuerung für Mitglieder in diesen Sprachen ist privat. Daher müssen wir Main public deklarieren, damit es von der Runtime aufgerufen werden kann.

Wir deklarieren Main als statisch (Shared in Visual Basic .NET), was bedeutet, dass es sich um eine Klassenmethode und nicht um eine instance-Methode handelt. Das bedeutet, dass die Runtime es aufrufen kann, ohne sich um das Erstellen eines MyApp-Objekts zu kümmern und einen Verweis (Me in Visual Basic .NET) an dieses Objekt an Main zu übergeben. (Beachten Sie, dass bei Verwendung eines Moduls in Visual Basic .NET die Methoden standardmäßig auf "Öffentlich " und "Freigegeben" festgelegt würden.)

Beachten Sie, dass Sie die Klasse beliebig aufrufen können. Ich habe es hier zufällig MyApp nennen. Diese Version von Main akzeptiert keine Parameter und gibt nichts zurück, das durch einen Rückgabetyp von void angegeben wird. In Visual Basic .NET ist Main ein Sub und nicht eine Funktion mit void-Rückgabewert .

Es ist möglich, Main zu schreiben, um ein Array von Zeichenfolgenzu verwenden, das den Befehlszeilenparameter enthält, und/oder einen ganzzahligen Erfolgscode zurückzugeben.

Schließlich rufen wir die WriteLine-Methode auf, um die Zeichenfolge zu schreiben. Ich habe mich für die Verwendung des vollqualifizierten Namens für die Funktion System.Console.WriteLine entschieden. WriteLine ist eine statische Methode (wie Main) der Console-Klasse im Systemnamespace .

Speichern von Eingaben

Es ist ein Problem, ständig vollqualifizierte Klassennamen einzugeben, sodass Sie mit C# und Visual Basic .NET Namespaces angeben können, die mit der using-Anweisung (oder Imports) verwendet werden sollen. Zum Beispiel:

C#

// Compile with: csc hellocs2.cs
using System;
class MyApp {
   public static void Main() {
      Console.WriteLine("Hello, world! (2) (from C#)");
   }
}

Visual Basic .NET

' Compile with: vbc hellovb2.vb
Imports System
Module MyApp ' VB-only change
    Sub Main()
        Console.WriteLine("Hello world! (2) (from VB .NET)")
    End Sub
End Module

Da der Compiler sowohl den Systemnamespace als auch den lokalen Namespace durchsucht, mussten wir im Aufruf von Console.WriteLine nicht System angeben. Dies ist hier kein großer Gewinn, aber es ist sehr praktisch, wenn Sie viele Objektverweise und Methodenaufrufe haben, wie in den folgenden Programmen.

Beachten Sie, dass der Namespace (System) und die Assembly, in der sich die Klassenkonsole befindet, zwei völlig getrennte Dinge sind. Eine bestimmte Assembly kann Klassen aus mehr als einem Namespace enthalten. durch das gleiche Token können die Klassen in einem bestimmten Namespace auf mehrere Assemblys verteilt werden. Es gibt keine Beziehung zwischen dem Namespace, zu dem eine Klasse logischerweise gehört, und der Assembly, in der der Binärcode für die Klasse gefunden werden kann. Sie teilen dem Compiler mit der Option /r mit, wo der Binärcode für die -Klasse zu finden ist. Sie teilen dem Compiler mit, welche Namespaces mit den using- und Imports-Anweisungen verwendet werden sollen.

Nur für Visual Basic: Module im Vergleich zu Klassen

Wir haben eine weitere Änderung in der .NET-Version von Visual Basic vorgenommen: Anstatt MyApp eine reguläre Klasse zu sein, haben wir es zu einem speziellen Klassentyp namens Module gemacht. Ein Modul ist das, was eine statische Klasse in C# wäre, wenn C# so etwas hätte. Hauptsächlich sind alle Methoden freigegeben (statisch in C#) und öffentlich; Daher müssen wir Main nicht als freigegeben oder öffentlich deklarieren. Beachten Sie jedoch, dass Sie keine instance eines Moduls wie eine Klasse erstellen können.

Warte! Gehen Sie noch nicht!

In einigen Situationen – für instance, wenn Sie das Hello-Programm über die Explorer ausführen – wird das Befehlsfenster möglicherweise ausgeblendet, bevor die Ausgabe angezeigt wird. Um dies zu verhindern, lesen Sie von der Tastatur (wodurch das Programm angehalten wird, bis Sie die EINGABETASTE drücken), indem Sie die ReadLine-Methode der Konsole aufrufen. (Wir machen dies immer als letzte Anweisung in Main für Konsolenanwendungen.)

Unser Programm sieht also endlich wie folgt aus (wir haben wieder zu einer Klasse in Visual Basic .NET gewechselt):

C#

// Compile with: csc hellocspause.cs
using System;
class MyApp {
   public static void Main() {
      Console.WriteLine("Hello, world! (pause) (from C#)");
      Console.ReadLine();   // wait until Enter; last line
   }
}

Visual Basic .NET

' Compile with: vbc hellovbpause.vb
Imports System
Public Class MyApp
    Public Shared Sub Main()
        Console.WriteLine("Hello world! (pause) (from VB .NET)")
        Console.ReadLine() 'Wait until Enter; last line
    End Sub
End Class

Hallo Welt in ASP.NET (in Visual Basic .NET und C#)

Informationen zu Webanwendungen

Wenn Sie ein ASP.NET-Programm schreiben, schreiben Sie Programme, die Webseiten erstellen und mit ihnen interagieren. Daher ist Ihr Programm nicht so einfach, wie nur ein paar Zeichen in die Konsole zu schreiben und auf Eingaben zu warten. Stattdessen verwendet Ihr Programm eine Webseite, um mit dem Benutzer zu kommunizieren, und muss auf Dinge reagieren, die der Benutzer auf der Seite ausführt. Sie müssen diese zusätzliche Komplikation berücksichtigen, auch wenn Sie etwas Einfaches wie "Hello, World!" tun.

Ursprünglich war das Web für die Verteilung von Dokumenten vorgesehen, sodass Webserver nur eine URL aus dem Browser nahmen und die Datenträgerdatei (in HTML formatiert) übermittelten, die dieser URL entspricht. Aber die bloße Bereitstellung statischer Inhalte ermöglichte keine sehr anspruchsvollen Anwendungen, sodass Webserver schnell weiterentwickelt wurden, um Formulare und verschiedene Arten von dynamischen Inhalten zu unterstützen. Ein gängiges Verfahren hierfür besteht darin, die Daten im Formular an ein eigenständiges Programm zu senden, das die Felder des Formulars analysiert, entscheidet, was zu tun ist, und eine Antwort erstellt, die im Browser des Benutzers angezeigt wird.

ASP

Eine der beliebtesten Möglichkeiten zum Einbinden einer Webseite an Code, der auf dem Server ausgeführt wird, sind die Microsoft Active Server Pages, die allgemein als ASP bekannt sind. In ASP erstellen Sie interpretiertes Skript (in der Regel Microsoft Visual Basic Scripting Edition (VBScript), manchmal JScript oder eine von einigen anderen Sprachen) in die Webseiten selbst. Wenn der Server diese Seite verarbeitet, interpretiert er das Skript und führt es aus, während es die Seite liest, um zu bestimmen, welche Antwort an den Browser gesendet werden soll. Diese Integration von HTML und einer Programmiersprache machte das Schreiben von ASP-Seiten relativ einfach und daher beliebt. Dies bedeutet jedoch, dass Ihre Programmierlogik (Skript) in dieselben Dateien eingebunden ist, die Ihre Formatierung (html) enthalten.

Wo ist Ihr Skript?

Beachten Sie, dass es möglich ist, sowohl clientseitige Skripterstellung (wobei das Skript als Teil der HTML-Seite an den Browser gesendet wird, der den Code ausführt, in der Regel in JScript/JavaScript) als auch serverseitige Skripterstellung (wie soeben beschrieben, in ASP-Seiten, die auf dem Server ausgeführt werden, und in der Regel VBScript).

Es handelt sich nur um serverseitige Skripts für die Dr. GUI .NET-Serie (zumindest größtenteils...) – Es gibt Hunderte (wenn nicht Tausende) anderer Orte, an denen sie lernen können, wie clientseitiges Skripting ausgeführt wird.

Das Anforderungs-/Antwortmodell

Denken Sie daran, dass Sie auf Webseiten eine Art HTTP-Anforderung (z. B. eine URL und die Daten in einem Formular) an den Server senden und eine Art Antwort (eine Webseite) an Sie zurücksendet. In der Regel zeigt Ihr Browser diese Antwort an. Wenn Sie auf verschiedene Webseitenelemente klicken, z. B. Schaltflächen oder Links, kann eines von zwei Dingen passieren: Wenn die Webseite clientseitigen Skriptcode enthält (mit der Webseite heruntergeladen und in der Regel in JScript/JavaScript), kann ein Ereignishandler das Ereignis behandeln, ohne mit dem Server zu sprechen. Abhängig vom HTML-Code für das Webseitenelement (z. B. eine Schaltfläche) sendet Ihr Browser möglicherweise eine HTTP-Anforderung an den Server. Dies geschieht in der Regel, wenn Sie in einem Formular auf die Schaltfläche Senden klicken.

Dieses Programmiermodell kann ziemlich schwierig zu verwenden sein, da Sie viel über HTTP-Anforderungen und -Antworten wissen müssen. Und das Modell unterscheidet sich grundlegend von dem viel einfacheren ereignisgesteuerten Formular- und Steuerungsmodell, das die meisten Windows-Anwendungen, insbesondere Visual Basic-Anwendungen, verwenden.

Das Programmiermodell für "klassische" ASP basiert auf dem HTTP-Anforderungs-/Antwortmodell – es handelt sich im Grunde um einen dünnen Wrapper um Anforderungen und Antworten, mit dem Sie die Felder der Anforderung abrufen, Skripts zum Bearbeiten und Abfragen von Daten schreiben und die Ausgabe in die Antwort schreiben können. Dies ist hilfreich, aber wir können es besser machen.

Wenn Sie an dieses Modell gewöhnt sind, sollten Sie nicht verzweifeln: Sie können ASP-Anwendungen weiterhin parallel zu ASP.NET Anwendungen ausführen. Wenn Sie wissen, was Sie mit dem Anwendungsstatus und anderen Problemen tun, können Sie ASP-Anwendungen Seite für Seite in ASP.NET konvertieren.

Das ASP.NET formularbasiertes Modell

Das Programmiermodell in ASP.NET fügt radikal unterschiedliche Elemente hinzu: Formulare und Steuerelemente. Das von ASP.NET Web Forms verkörperte Programmiermodell ähnelt ziemlich dem einer Windows-Anwendung (und insbesondere einem Visual Basic-Formular), obwohl die Mechanismen unter den Programmiermodellen sehr unterschiedlich sind.

Konzeptionell besteht eine reine Web Forms-Anwendung aus einer Reihe von Formularen, die Steuerelemente und HTML enthalten. Die Steuerelemente verfügen über Eigenschaften und Methoden und generieren Ereignisse. Diese Ereignisse werden normalerweise auf dem Server behandelt, obwohl es sicherlich möglich ist, clientseitige Skripts zu schreiben, um bestimmte Ereignisse auf dem Client zu behandeln. (Das ist jedoch außerhalb des Bereichs dieser Spalte.)

Mit anderen Worten, das Web Forms Programmiermodell ist praktisch identisch mit dem Visual Basic-Programmiermodell. Wenn Sie Also Visual Basic kennen, werden Sie Web Forms lieben. Dies ist ein viel einfacheres Modell als das ASP-Modell.

Selbst die einfachsten Anwendungen, die wir hier durchführen, sind durch und durch moderne Web Forms Anwendungen. Beachten Sie, dass interessanterweise die Sprache, die zum Beschreiben des Layouts des Web Forms verwendet wird, sehr ähnlich dem Standard-HTML ist (mit hauptsächlich einigen zusätzlichen Attributen und Steuerelementnamen).

Und jetzt unser Code ...

Sehen wir uns kurzerhand unsere erste Web Forms-Anwendung an – diesmal mit Visual Basic .NET mit dem code eingebetteten ASP-Format direkt in der Datei helloinlinevb.aspx und dann mit dem C#-Äquivalent:

ASP.NET mit Visual Basic .NET

<script runat="server" language="vb">
   Public Sub doClick(sender as object, e as EventArgs)
      TheLabel.Text = "Hello, world! (from ASP.NET in VB .NET, " + _
         "code inline)"
   End Sub
</script>
<html>
   <head><title>In-line ASPX file in VB .NET</title></head>
   <body>
      VB .NET ASP.NET application with inline code<P><P>
      <form runat="server">
         <asp:button runat="server" text="Say Hello" 
            onclick="doClick" />
         <p>
         <asp:label runat="server" text="" id="TheLabel" />
      </form>
   </body>
</html>

ASP.NET mit C#

<script runat="server" language="C#">
   void doClick(object sender, EventArgs e) {
      TheLabel.Text = "Hello, world! (from ASP.NET in C#, " +
         "code inline)";
   }
</script>
<html>
   <head><title>In-line ASPX file in C#</title></head>
   <body>
      C# ASP.NET application with inline code<P><P>
      <form runat="server">
         <asp:button runat="server" text="Say Hello" 
            onclick="doClick" />
         <p>
         <asp:label runat="server" text="" id="TheLabel" />
      </form>
   </body>
</html>

Nicht viel Unterschied zwischen den Sprachen

Beachten Sie zunächst, dass die C#-Seite dem Visual Basic .NET-Code sehr ähnlich ist. Abgesehen vom Code selbst besteht die einzige Änderung im Ändern des Sprachattributes für das <SCRIPT-Tag> in C# und das Ändern der Titel und des Texts in "C#" anstelle von "Visual Basic .NET". Genauso einfach könnten wir jede ASP.NET kompatible Sprache wie JScript .NET ersetzen.

Wo ist Main?

Sie werden auch feststellen, dass es keine Main-Methode gibt. Ihr Code wird von ASP.NET ausgeführt, sodass Main nicht erforderlich ist. Stattdessen werden Ihre Ereignishandler bei Bedarf aufgerufen. Dieser Unterschied ähnelt dem Wechsel von DOS zur ereignisgesteuerten Windows-Programmierung, insbesondere wie in Visual Basic.

Was macht also der Code?

Beachten Sie folgendes: Zunächst verfügen wir über eine kleine Visual Basic .NET-Subroutine (eine Methode, die void in C# zurückgibt), die die Bezeichnung "TheLabel" im html-Code unten auf unsere Nachricht festlegt, wenn die Unterroutine aufgerufen wird. Dies ist in ein <SCRIPT-Tag> eingeschlossen, das angibt, dass dieses Skript auf dem Server ausgeführt werden soll und dass sich der Code in Visual Basic (oder C#) befindet. Beachten Sie, dass wir die übergebenen Parameter ignorieren – sie dienen dazu, uns über das ereignis zu informieren, das aufgetreten ist, aber derzeit ist uns die Tatsache, dass das Ereignis aufgetreten ist, nur wichtig.

Jetzt der HTML-Code für das Webseitenlayout

Als Nächstes haben wir den HTML-Code für die Seite selbst. Wenn Sie mit HTML überhaupt vertraut sind, wird Ihnen dieser Teil sehr vertraut sein. Abgesehen von drei Dingen: Das Formular, die Schaltfläche und die Bezeichnung sind mit dem attribut runat="server" gekennzeichnet, die Schaltfläche wird als "asp:button" und nicht nur als reguläre HTML-Eingabeschaltfläche deklariert, und es gibt dieses seltsame Bezeichnungselement mit dem Namen "asp:label". Ach, und noch eins: Das Formular enthält nichts über Posten oder Aktionen.

Ausführen unserer ersten ASP.NET Anwendungen

Wenn Sie Visual Studio .NET zum Erstellen Ihrer Web Forms-Anwendung verwenden, ist die Erstellung sehr einfach und wird automatisch ordnungsgemäß ausgeführt, wenn Sie auf die Schaltfläche Ausführen klicken. Es ist wirklich glatt. Wir werden später mehr darüber sprechen. Und wenn Sie Web Matrix verwenden, ist dies genauso einfach – und Web Matrix enthält einen eigenen Mini-Webserver, sodass Sie IIS nicht einmal installieren müssen, wenn Sie dies nicht möchten.

Aber vorerst machen wir alles mit Editor und verarbeiten alle Dateien selbst.

Das Ausführen ASP.NET Anwendungen ist etwas komplizierter als das Ausführen einer Konsolenanwendung. Aber sobald Sie die Dinge eingerichtet haben, ist es wirklich ziemlich einfach.

Zunächst müssen Sie den IIS-Webserver installieren. Sie sollten dies getan haben, bevor Sie die .NET Framework oder Visual Studio .NET installiert haben. Wenn Sie damit Probleme haben, sollten Sie IIS installieren und nur die Serverkomponenten mithilfe des Setupprogramms neu installieren können. Sie installieren Windows-Komponenten wie IIS in Systemsteuerung (klicken Sie im Startmenü auf Systemsteuerung, und doppelklicken Sie dann auf das Symbol Software. Klicken Sie dann auf der linken Seite auf Windows-Komponenten hinzufügen/entfernen , und wählen Sie Internetinformationsdienst (IIS) aus.

Als Nächstes müssen Sie IIS als Webserver aktivieren. Klicken Sie hierzu im Menü Start auf Systemsteuerung, doppelklicken Sie auf das Symbol Verwaltung, und klicken Sie dann auf Internetinformationsdienste oder Internetinformationsdienste-Manager (IIS). (Dr. GUI verwendet Windows XP Professional und Microsoft® Windows® Server 2003. Wenn Sie ein anderes Betriebssystem verwenden, werden die Dinge möglicherweise etwas anders genannt.)

Klicken Sie in der Internetinformationsdienste-Konsole auf das kleine Pluszeichen neben dem Symbol Ihres Computers. Klicken Sie dann auf das kleine Pluszeichen neben dem Ordner Websites. Wie hier gezeigt, sollte ein Eintrag für die Standardwebsite angezeigt werden.

Abbildung 1. Internetinformationsdienste-Konsole mit ausgewählter Standardwebsite

Wenn die Standardwebsite angibt, dass sie beendet wurde, müssen Sie den Dienst starten. Klicken Sie hierzu mit der rechten Maustaste auf Standardwebsite , und klicken Sie auf Start.

Hinweis Wenn Sie die mit IIS verbundenen Sicherheitsprobleme nicht verstehen, sollten Sie dies möglicherweise nicht tun, wenn Ihr Computer ohne Firewall direkt mit dem Internet verbunden ist.

Hinweis Sie können auch den in Web Matrix integrierten Webserver zum Testen Ihrer Anwendungen verwendenSie müssen IIS nicht einmal installieren. Befolgen Sie dazu die Anweisungen in Web Matrix.

Jetzt ist der Webserver in Betrieb. (Sie können es beenden, wenn Sie fertig sind, indem Sie erneut mit der rechten Maustaste auf Standardwebsite klicken und auf Beenden klicken.) Alles, was wir tun müssen, ist, die Dateien in das richtige Verzeichnis zu kopieren, und IIS wird seine Magie tun.

Installieren der Anwendung

Um den richtigen IIS-Ordner zu öffnen, klicken Sie mit der rechten Maustaste auf Standardwebsite , und klicken Sie dann auf Öffnen. Dadurch wird der Ordner geöffnet, den IIS für diese Website verwendet.

Dr. GUI empfiehlt, einen Unterordner (oder zwei) für Ihr Projekt zu erstellen. Dr. GUI nennt seine Unterordnerstruktur "DrGUIdotNet\0" für die Webseiten, die Dr. GUI .NET #0 zugeordnet sind.

Nachdem Sie einen Unterordner erstellt haben, kopieren Sie die ASPX-Seite(en) in ihn.

Abbildung 2. Die Webanwendungsdateien, die in den richtigen Ordner kopiert wurden

Ausführen deiner Anwendung

Navigieren Sie schließlich zu Ihrem Webbrowser, und durchsuchen Sie die Datei auf Ihrem lokalen Computer. Auf dem Computer der Dr. GUI sind https://localhost/DrGUIdotNet/0/helloinlinevb.aspx die URLs und https://localhost/DrGUIdotNet/0/helloinlinecs.aspx. Die Domäne "localhost" bezieht sich auf Ihren Computer. Und wenn Sie Ihre Unterverzeichnisse und die ASPX-Datei wie der gute Arzt benannt haben, werden Sie feststellen, dass die obige URL auch für Sie funktioniert.

Beachten Sie, dass Sie http: als Protokoll verwenden müssen. Wenn Sie versuchen, die ASPX-Datei über das Dateisystem mithilfe von Internet Explorer zu öffnen, umgehen Sie IIS, was bedeutet, dass Ihr Code nicht ausgeführt wird.

Wenn Sie die Webseite richtig eingerichtet haben, klicken Sie einfach auf die Schaltfläche "Hallo sagen ", und ASP.NET begrüßt Sie.

Abbildung 3. Hello World! Anwendung in Visual Basic .NET mit Inlinecodenach dem Klicken auf die Schaltfläche

Aber beachten Sie, dass Sie nichts kompiliert haben! ASP.NET das für Sie getan. Wenn Sie den Code ändern möchten, ändern Sie ihn einfach (Dr. GUI lässt Editor einfach laufen und führt eine Datei.Speichern aus, um auf den Datenträger zu schreiben) und laden Sie die Webseite neu (klicken Sie auf die Schaltfläche Zurück , wenn Sie den ursprünglichen Zustand abrufen möchten). ASP.NET kümmert sich um alle Aktualisierungen für Sie. Beeindruckend, nicht?

Wie sieht der HTML-Code im Browser aus?

Wenn Sie die Anwendung ausführen, können Sie sich übrigens den HTML-Code ansehen, der im Browser angezeigt wird. Sie werden feststellen, dass sie sich stark von der ASPX-Datei unterscheidet – diese Unterschiede sind die Verarbeitung, die ASP.NET für Sie ausführt. Für instance generiert die Visual Basic .NET-Anwendung den folgenden HTML-Code, bevor Sie auf die Schaltfläche klicken (die C#-Version ist ziemlich identisch, mit Ausnahme des Ersetzens von "Visual Basic .NET" durch "C#" an zwei Stellen unten):

HTML, das von ASP.NET Anwendung generiert wird, bevor auf die Schaltfläche geklickt wird

<html>
   <head><title>In-line ASPX file in VB .NET</title></head>
   <body>
      VB .NET ASP.NET application with inline code<P><P>
      <form name="_ctl0" method="post" action="helloinlinevb.aspx" id="_ctl0">
<input type="hidden" name="__VIEWSTATE" value=
"dDwxMDA3MzE2MzEyOzs+O3sv0P01UevZXFJOLqBbw+4DdQ4=" />

         <input type="submit" name="_ctl1" value="Say Hello" />
         <p>
         <span id="TheLabel"></span>
      </form>

   </body>
</html>

Die wichtigsten Unterschiede zwischen dem an den Client gesendeten HTML-Code und der ursprünglichen ASPX-Datei liegen in der Form. Erstens verfügt das Formular selbst über einige spezielle Attribute, damit es mit ASP.NET kommunizieren kann. Als Nächstes ist ein ausgeblendetes INPUT-Tag hinzugefügt, das zum Speichern von Daten über den Zustand der angezeigten Seite verwendet wird. Schließlich wurden alle ASP.NET-Steuerelemente (die steuerelemente, die mit "asp." in der ASPX-Datei begonnen haben) als richtiges HTML gerendert– in diesem Fall eine Eingabeschaltfläche Zum Übermitteln und für die Bezeichnung eine SPAN mit Text.

Die Tatsache, dass ASP.NET den HTML-Code für ASP.NET-Steuerelemente für Sie schreibt, ist äußerst leistungsfähig: Wenn Sie ASP.NET Steuerelemente verwenden, müssen Sie sich keine Gedanken darüber machen, unterschiedliche HTML-Dateien für verschiedene Browser zu schreiben. Stattdessen erkennt ASP.NET, welchen Browser der Benutzer verwendet, und generiert den entsprechenden HTML-Code für diesen Browser. Alles, was Sie tun, ist die allgemeinen Steuerelemente zu verwenden und ASP.NET mit den Details umgehen zu lassen. (Dies führt jedoch nicht dazu, dass Sie Ihre Anwendung mit allen Browsern testen, die Sie unterstützen möchten.)

Was geschieht, wenn Sie auf die Schaltfläche klicken?

Wenn Sie auf die Schaltfläche klicken, um "Hello" zu sagen, wird eine HTTP-Anforderung an den Server gesendet, und ASP.NET bestimmt aus dieser Anforderung, dass der Skriptcode für den Schaltflächenklick ausgeführt werden soll. Nach dem Ausführen des Codes generiert ASP.NET die Seite mithilfe der aktualisierten Werte der Steuerelemente neu und sendet sie an den Browser:

HTML- generiert von ASP.NET Anwendung nach dem Klicken auf die Schaltfläche

<html>
   <head><title>In-line ASPX file in VB .NET</title></head>
   <body>
      VB .NET ASP.NET application with inline code<P><P>
      <form name="_ctl0" method="post" action="helloinlinevb.aspx" id="_ctl0">
<input type="hidden" name="__VIEWSTATE" value="dDwxMDA3Mz
E2MzEyO3Q8O2w8aTwxPjs+O2w8dDw7bDxpPDM+Oz47bDx0PHA8cDxsPFR
leHQ7PjtsPEhlbGxvLCB3b3JsZCEgKGZyb20gQVNQLk5FVCBpbiBWQiAuTkVULCBjb2RlIGlub
GluZSk7Pj47Pjs7Pjs+Pjs+Pjs+BQyLRwj8cd6YqwFn4gpQYk2NhTY=" />

         <input type="submit" name="_ctl1" value="Say Hello" />
         <p>
         <span id="TheLabel">Hello, world! (from ASP.NET in VB
 .NET, code inline)</span>
      </form>
   </body>
</html>

In diesem Fall ist der HTML-Code identisch mit zwei Ausnahmen: Erstens unterscheidet sich das Value-Attribut des ausgeblendeten INPUT-Elements; zweitens wird der neue Wert der Zeichenfolge, für die TheLabel in Ihrem Code festgelegt wurde, im SPAN-Tag angezeigt, das vom Bezeichnungssteuerelement generiert wurde.

Sie fragen sich möglicherweise, ob ASP.NET Ihren Code interpretiert. Die Antwort lautet nein– stattdessen schneidet ASP.NET den Code aus und kompiliert ihn, indem die resultierende Assembly in einem privaten Cache gespeichert wird. Sie kompiliert sie nur neu, wenn Sie den Quellcode ändern. Normalerweise möchten oder müssen Sie sich die resultierende Assembly nicht ansehen, aber später zeigt Ihnen Dr. GUI, wie Sie sie finden (nur einmal).

CodeBehind

Im klassischen ASP haben Sie Ihren VBScript-Code direkt in Ihre HTML-Seiten gemischt (ähnlich dem, was wir gerade getan haben), und Sie schreiben HTML-Code häufig direkt in die Antwort. Das ASP.NET Äquivalent dieser Methode ist oben dargestellt.

Aber ASP.NET unterstützt auch das Trennen der Codedatei von der HTML-ähnlichen ASPX-Datei. Dies wird als "Code Behind" bezeichnet. Dies hat den Vorteil, dass es erheblich einfacher ist, sowohl am HTML-Code als auch am Code zu arbeiten, wenn sie sauber getrennt sind – insbesondere, wenn verschiedene Personen am HTML-Layout arbeiten als die Codelogik, wie oft der Fall wäre.

Wir verwenden das CodeBehind-Feature für alle zukünftigen Dr. GUI .NET ASP.NET Beispiele, da es einfach schöner aussieht.

Für unsere "Hello"-Anwendung verfügen wir über zwei Dateien: die ASPX-Datei, die den HTML-Code und den Verweis auf die Codedatei enthält, und die Visual Basic -.NET-Dateien (.vb) und C#-Dateien (.cs) für den tatsächlichen Code. Für unsere Visual Basic .NET-Version sieht die Datei hellocodebehindvb.aspx wie folgt aus:

ASP.NET mit Visual Basic .NET Code behind

<%@ Page Language="vb" Src="hellocodebehindvb.vb" 
         Inherits="HelloWebFormVb"%>
<HTML>
   <HEAD>
      <title>Web Form</title>
   </HEAD>
   <body>
   VB .NET ASP.NET application with "Code Behind"<P><P>
      <form runat="server" ID="Form1">
         <asp:button runat="server" text="Say Hello" 
            ID="Button1" />
         <p>
         <asp:label runat="server" text="" id="TheLabel" />
      </form>
   </body>
</HTML>

Die Unterschiede zur Code-Inlineversion sind:

  • Der SCRIPT-Abschnitt der Inlineversion wird durch ein spezielles Tag ersetzt, das die Sprache, den Quelldateinamen und den Klassennamen in der Quelldatei der Klasse angibt, die von unserer Seite verwendet wird.
  • Der Code selbst befindet sich in einer separaten Datei.
  • Die Schaltfläche gibt keine Methode an, die aufgerufen werden soll, wenn sie geklickt wird– ASP.NET den Schaltflächenklick automatisch mit der -Methode verknüpft.
  • Alle ASP.NET-Steuerelemente verfügen über IDs, sodass über den Code darauf zugegriffen werden kann.

Die C#-Version der ASPX-Datei ist mit Ausnahme der Sprache, des Quelldateinamens und des Dateinamens und des Texts im Titel und auf der Seite identisch. Es befindet sich in der Auflistungsdatei Quellcode , die diesem Artikel beigefügt ist.

Der Visual Basic .NET-Code für die CodeBehind-Klasse ist ganz einfach:

Visual Basic .NET -Codebehind-Code für oben

Public Class HelloWebFormVb
    Inherits System.Web.UI.Page
    Protected WithEvents Button1 As System.Web.UI.WebControls.Button
    Protected TheLabel As System.Web.UI.WebControls.Label

    Private Sub Button1_Click(ByVal sender As Object, 
      ByVal e As System.EventArgs) Handles Button1.Click
      TheLabel.Text = _
        "Hello, world! (from an ASP.NET/VB .NET WebForm with code behind)"
    End Sub
End Class

Beachten Sie, dass der Klassenname mit dem Inherits-Attribut am Anfang der ASPX-Datei identisch ist. Dies impliziert, dass die Seitenklasse für Ihre Anwendung von dieser Klasse erbt– in diesem Fall HelloWebFormVb (oder HelloWebFormCs, wenn Sie C# verwenden). Wenn Sie mit Vererbung nicht vertraut sind, machen Sie sich vorerst keine sorgen. Wir werden dies in einer zukünftigen Dr. GUI .NET-Spalte besprechen. Stellen Sie sich dies vorerst nur so vor, als wenn Sie von etwas erben, können Sie die gesamte Funktionalität des Dings nutzen, von dem Sie erben – ziemlich praktisch!

Sie werden feststellen, dass unsere Klasse von System.Web.UI.Page erbt, die über viele Funktionen verfügt, die wir verwenden können.

Als Nächstes deklarieren wir eine Variable, die der Schaltfläche und der Bezeichnung im HTML-Code entspricht. Beachten Sie, dass die Namen mit den IDs in der ASPX-Datei identisch sind. Beachten Sie auch, dass die Schaltfläche mit WithEvents deklariert ist, da wir ihr Klickereignis behandeln.

Danach deklarieren wir den Klickhandler. (Beachten Sie die Handles-Klausel .) Der rest des Codes ist dem Inlineskriptcode sehr ähnlich.

Im Folgenden finden Sie die C#-Version:

C#-Code "CodeBehind"

public class HelloWebFormCs : System.Web.UI.Page
{
   protected System.Web.UI.WebControls.Button Button1;
   protected System.Web.UI.WebControls.Label TheLabel;

   override protected void OnInit(System.EventArgs e)
   {
      this.Button1.Click += 
         new System.EventHandler(this.Button1_Click);
      base.OnInit(e);
   }

   private void Button1_Click(object sender, System.EventArgs e)
   {
      TheLabel.Text = 
      "Hello, world! (from an ASP.NET/C# WebForm with code behind)";
   }
}

Dies ist der Visual Basic .NET-Version in Bezug auf die Vererbung sehr ähnlich, aber da C# das automatische Verbinden von Ereignissen mit Handlermethoden nicht unterstützt, müssen wir dies explizit tun. Dazu überschreiben wir die OnInit-Methode , verbinden den Handler und rufen dann die OnInit-Methode der Basisklasse auf. Wir erläutern, wie die Handlerverbindung funktioniert, wenn wir Delegaten und Ereignisse in einer späteren Spalte besprechen. Vorerst sollten Sie nur wissen, dass die onInit-Methode , die wir deklariert haben, automatisch aufgerufen wird, wenn die Seite initialisiert wird, und dass die Anweisung in das Klickereignis, das von der Schaltfläche ausgelöst wird, mit der Button1_Click-Methode verknüpfen.

Wir werden auch über das Überschreiben und Aufrufen von Basisklassenmethoden sprechen, wenn wir über Vererbung in einer zukünftigen Spalte sprechen. Vorerst sollten Sie nur wissen, dass diese funky-Anweisung das Klickereignis der Schaltfläche anhängt, die von der Button1_Click-Methode behandelt werden soll.

Verwenden von Visual Studio .NET für Web Forms Anwendungen

Die Verwendung von Visual Studio .NET zum Erstellen von Web Forms Anwendungen ist unglaublich einfach. Erstellen Sie einfach ein neues Projekt vom Typ "ASP.NET Webanwendung" in der Sprache Ihrer Wahl (entweder C# oder Visual Basic .NET), ziehen Sie eine Schaltfläche und eine Bezeichnung auf Ihre Webseite, und doppelklicken Sie auf die Schaltfläche, damit Sie den Code hinzufügen können, um die Bezeichnung festzulegen. Sie können alles in etwa einer Minute flach erledigen, einschließlich der Ausführung des Programms, um die Ergebnisse zu überprüfen. Es ist erstaunlich, und es lohnt sich, für Visual Studio .NET zu bezahlen!

Siehe? Sie können in C# und Visual Basic .NET austauschen!

Wie der gute Arzt gerade erwähnt hat, können Sie in C# und Visual Basic .NET im Gegensatz zu einigen anderen Sprachen, z. B. Brand J, eine Funktion schreiben, die zwei Variablen austauscht.

Hier sind Programme, die den Inhalt von zwei ganzzahligen Variablen austauschen:

C#

// Compile with: csc swapcs.cs
using System;
class SwapInts {
   public static void Main() {
      int i = 1, j = 2;
      Console.WriteLine("C#: i is {0}, j is {1}", i, j);
      Swap(ref i, ref j);
      Console.WriteLine("i is {0}, j is {1}", i, j);
      Console.WriteLine(
         "i is still {1:####}, and j still is {0:####}",
         j, i
      );
      Console.ReadLine();
   }

   static void Swap(ref int a, ref int b) {
      int t = a;
      a = b;
      b = t;
   }
}

Visual Basic .NET

' Compile with: vbc swapvb.vb
Imports System
Public Class SwapInts ' used class, not module, here...
    Public Shared Sub Main() ' ...so had to declare public, shared
        Dim i As Integer = 1, j As Integer = 2
        Console.WriteLine("VB .NET: i is {0}, j is {1}", i, j)
        Swap(i, j) ' don't have to use "ref" to call!
        Console.WriteLine("i is {0}, j is {1}", i, j)
        Console.WriteLine( _
            "i is still {1:####}, and j still is {0:####}", _
            j, i)
        Console.ReadLine()
    End Sub

    Private Shared Sub Swap(ByRef a As Integer, ByRef b As Integer)
        Dim t As Integer = a
        a = b
        b = t
    End Sub
End Class

Hier sind einige Dinge zu beachten. Zunächst hat der gute Arzt den C#-Typ int und den Visual Basic .NET-Typ Integer anstelle des .NET Framework Typs System.Int32 (der vollständige Name von Int32) verwendet. Da int in C# und Integer in Visual Basic .NET einfach Aliase für System.Int32 sind, gibt es überhaupt keinen Unterschied, und Sie können Problemlos Int32 oder System.Int32 in den C#- oder Visual Basic .NET-Programmen verwenden.

Einige Programmierer bevorzugen die Verwendung der Framework-Typen (z. B. Int32), aber da die Beispiele und Dokumentation stattdessen die integrierten Typen verwenden, bevorzugt Dr. GUI die integrierten Typen.

Wenn Sie eines dieser Programme in eine andere Sprache übersetzen möchten, müssen Sie herausfinden, welcher Typ in der neuen Sprache int/Integer/System.Int32 entspricht, und ihn verwenden – oder System.Int32/Int32 verwenden.

Beachten Sie als Nächstes die flexible Formatierung, die von Console.WriteLine bereitgestellt wird. Die Variablen werden in die Ausgabezeichenfolge anstelle der Ausdrücke in geschweiften Klammern {0} und {1}eingefügt. Die Zahlen 0 und 1 stellen die Position des zu formatierenden Parameters dar. Der erste Parameter ist nummeriert 0, nicht eins. (Dies und die Tatsache, dass die Arraynummerierung auch mit 0 beginnt, ist der Grund, warum diese Spalte Dr. GUI .NET #0, nicht #1 ist.) Sie werden feststellen, dass der gute Arzt die Variablen in der endgültigen WriteLine-Anweisung umgestellt hat. Die Möglichkeit, die Reihenfolge zu ändern, ist wichtig, wenn Sie die Formatzeichenfolgen in natürliche Sprachen mit unterschiedlichen Grammatiken übersetzen. Sie können die Formatzeichenfolge ändern, ohne den Aufruf zu ändern. Darüber hinaus ist es möglich, zusätzliche Formatierungsinformationen in die geschweiften Klammern einzufügen, wie in der letzten WriteLine-Anweisung . Dieser Formatierungsmechanismus ist auch für Ihre Typen erweiterbar. (Dies wird in einer späteren Spalte erläutert.)

Beachten Sie abschließend den wichtigsten Punkt im C#-Code: Sowohl im Aufruf von Swap als auch in der Deklaration der -Methode werden die als Verweis übergebenen Parameter mit ref gekennzeichnet. Auf diese Weise teilen wir dem C#-Compiler mit, dass wir beim Aufrufen der -Methode möglicherweise die Werte von i und j ändern möchten. Wenn wir keine Ref verwenden, würden wir die Kopien austauschen, die generiert werden, wenn die Werte nach Wert übergeben werden. (Sie können dies versuchen, indem Sie alle vier Instanzen des Worts ref löschen und selbst sehen.)

In Visual Basic .NET markieren wir die Parameter in der Methodendeklaration mit dem Wort Byref, aber wir müssen nicht jeden Aufruf markieren – das ist einfacher und kompatibel mit älteren Versionen von Visual Basic, aber es gibt keine Möglichkeit, in Visual Basic .NET anhand des Aufrufs zu ermitteln, ob Sie nach Verweis oder wert aufrufen.

Austauschen mithilfe von ASP.NET

Natürlich können wir auch Variablen in ASP.NET Programmen austauschen. Sehen Sie sich das folgende ASPX-Programm an. (Ich werde den Visual Basic .NET-Code später anzeigen):

ASP.NET

<%@ Page Language="vb" Src="webswapvb.vb" Inherits="SwapWebFormVb"%>
<HTML>
   <HEAD>
      <title>Swap in VB .NET</title>
   </HEAD>
   <body>
   VB .NET ASP.NET application to swap two values<P><P>
      <form runat="server" ID="Form1">
         I:&nbsp
         <asp:textbox runat="server" text="3" ID="I" />
         J:&nbsp
         <asp:textbox runat="server" text="4" ID="J" />
         <p>
         <asp:button runat="server" text="Swap" ID="Button1" />
         <p>
      </form>
   </body>
</HTML>

Diese Seite ähnelt den anderen, die wir gesehen haben. Beachten Sie, dass der Text (z. B. "I:" gefolgt von einem unterbrechungsfreien Leerzeichen) mit den ASP.NET-Steuerelementen auf der Seite durchsetzt ist. Dies bietet Ihnen eine enorme Flexibilität beim Entwerfen Ihrer Seite, ohne sich Gedanken darüber machen zu müssen, wohin der Skriptcode fließt. Mit Code Behind enthält die ASPX-Seite das Layout, und Ihr Code , einschließlich des Einbindens von Ereignissen und Formularelementen, befindet sich in der Codedatei.

Sehen wir uns also den .NET-Code von Visual Basic an:

Visual Basic .NET

Public Class SwapWebFormVb
   Inherits System.Web.UI.Page
   Protected WithEvents Button1 As System.Web.UI.WebControls.Button
   Protected I As System.Web.UI.WebControls.TextBox
   Protected J As System.Web.UI.WebControls.TextBox
   Private Sub Button1_Click(ByVal sender As Object, _
      ByVal e As System.EventArgs) Handles Button1.Click
      ' VB allows properties to be passed by ref, C# doesn't
      ' However, VB generates temporarys, so it's as slow as C#
      ' ...but easier to write!
      Swap(I.Text, J.Text)
   End Sub
   Private Shared Sub Swap(ByRef a As String, ByRef b As String)
      Dim t As String = a
      a = b
      b = t
   End Sub
End Class

Auch dies ist dem vorherigen Programm ziemlich ähnlich. Der Standard Unterschied besteht darin, dass wir einige verschiedene Steuerelemente (anstelle von Beschriftungen) deklarieren und in unserem Ereignishandler die Werte aus den Textfeldern lesen, austauschen und wieder einfügen. (Natürlich ist es möglich, dies in weniger Zeilen zu schreiben – die Swap-Funktion ist jedoch hier, um einen Punkt zu machen. Und es wäre nützlich, wenn Sie andere Variablen austauschen.)

Beachten Sie, dass die Swap-Methode die Zeichenfolgen nicht kopiert . Stattdessen werden die Verweise ausgetauscht. Das ist viel effizienter.

Hinweis: Es ist technisch nicht möglich, eine Eigenschaft, bei der es sich eigentlich um einen Methodenaufruf handelt, als ByRef-Parameter an eine Methode zu übergeben (da Sie eine Adresse einer Speichervariablen und keine Funktion übergeben müssen). Sie stellen jedoch fest, dass dies der obige Code in Swap(I.Text, J.Text)zu tun scheint. Wie kann das sein?

Nun, was hier wirklich passiert, ist, dass Visual Basic .NET unter der Haube Code generiert, der eine temporäre für jede Eigenschaft erstellt, die temporären Dateien an die Swap-Methode übergibt und dann die Ergebnisse zurück in die Eigenschaften kopiert. (Dies können Sie anhand des generierten Codes in ILDASM nachweisen, wie weiter unten in dieser Spalte beschrieben.)

Anders ausgedrückt: Obwohl die Syntax viel kürzer als die von C# ist, ist der tatsächlich generierte Code praktisch gleich. Visual Basic hat den Vorteil, dass es einfacher ist. C# hat den Vorteil, dass es potenziell zeitaufwendigen Code nicht vor Ihnen verbirgt.

C#

public class SwapWebFormCs : System.Web.UI.Page
{
   protected System.Web.UI.WebControls.TextBox I;
   protected System.Web.UI.WebControls.TextBox J;
   protected System.Web.UI.WebControls.Button Button1;
   override protected void OnInit(System.EventArgs e)
   {
      this.Button1.Click += 
         new System.EventHandler(this.Button1_Click);
      base.OnInit(e);
   }
   private void Button1_Click(object sender, System.EventArgs e)
   {   // have to move from properties to variables...
      string a = I.Text;
      string b = J.Text;
      Swap(ref a, ref b);
      I.Text = a; // and back :(
      J.Text = b;
   }
   // note that references are swapped, strings aren't moved!
   static void Swap(ref string a, ref string b) {
      string t = a;
      a = b;
      b = t;
   }
}

Auch hier keine Überraschungen– und beachten Sie, dass die Swap-Methode die Verweise auf die Zeichenfolgen austauscht, nicht die Zeichenfolgen selbst. Und wie Sie erraten haben, müssen Sie den Code für die temporären Variablen im Aufruf der Swap-Methode selbst schreiben.

Versuch es doch mal!

Lass es uns tun!

Nachdem Sie .NET installiert haben, können Sie Editor oder Visual Studio verwenden, um eine Datei zu erstellen, die das letzte der vorherigen C#-Programme "Hallo Welt" enthält. (Dies ist die Mit dem Console.ReadLine-Aufruf als letzte Zeile von Main. Erstellen Sie ein neues, leeres Unterverzeichnis, und speichern Sie die Datei dort, und nennen Sie sie hellocspause.cs. (CS steht für C#.) Sie können den Code aus diesem Artikel kopieren oder aus der Newsgroup abrufen. Oder, noch besser, da dies kurz ist, geben Sie es selbst ein.

Und während Sie dabei sind, führen Sie eine Visual Basic .NET-Version aus, und nennen Sie die Datei hellovbpause.vb.

Öffnen Sie als Nächstes eine Eingabeaufforderung, und wechseln Sie zu dem verzeichnis, das Sie verwenden. Kompilieren Sie das Programm, indem Sie den Befehl "csc hellocspause.cs" ("vbc hellovbpause.vb" für Visual Basic .NET) eingeben. (Denken Sie daran, den Pfad bei Bedarf mit sdkvars.bat festzulegen.)

Wenn Sie im Verzeichnis nachsehen, werden Sie sehen, dass hellocspause.exe (und hellovbpause.exe) erstellt wurden. Führen Sie sie aus, indem Sie "hellocspause" (oder "hellovbpause") eingeben. Ihr Konsolenfenster sollte "Hello, World! (Anhalten) (aus C#)" oder "Hello, World! (Anhalten) (aus Visual Basic .NET)".

Was ist wirklich in dieser EXE?

Listen Sie den Inhalt des Verzeichnisses auf, in dem Sie die Konsolenanwendungen gespeichert haben, und beachten Sie, dass pro Programm nur zwei Dateien vorhanden sind: hellocspause.cs und hellocspause.exe sowie hellovbpause.vb und hellovbpause.exe. Die .exe Dateien sind sehr klein – etwa 3 KB oder so. Dies ist Einfachheit selbst.

Aber was ist in diesen Dateien enthalten? Nun, das ist nicht ganz so einfach. In .exe-Dateien befindet sich ein Stubladeprogramm– ein kleines systemeigenes Computersprachprogramm, das dazu führt, dass die .NET-Runtime geladen und gesteuert wird, damit sie mit der Ausführung Des Programms beginnen kann. (.Dll Dateien verfügen nicht über einen Stubladeprogramm für die .NET-Runtime, da die Runtime von der .exe geladen wird, die die .dll aufruft.)

Die beiden wirklich wichtigen Teile sind jedoch die Metadaten, die Ihr Programm für die Common Language Runtime und compilers, die möglicherweise auf Typen in Ihrem Programm verweisen, und den Code in IL beschreiben. (Sie werden sich erinnern, dass IL die Computersprache der .NET-Runtime ist.) Wenn die Runtime die einzelnen Methoden zum ersten Mal ausführt, übersetzt sie die IL in nativen Code und führt dann den nativen Code aus. .NET interpretiert il nie ; Sie kompiliert sie immer in nativen Code.

Verwenden von ILDASM, um auf den Grund zu gehen

Wie können Sie sich die Metadaten und die IL ansehen? Dies ist einfach mit einem Hilfsprogramm namens IL Disassembler (ILDASM). Geben Sie einfach "ILDASM hellovbpause.exe" (oder "ILDASM hellocspause.exe") an der Eingabeaufforderung ein, vorausgesetzt, die .exe Datei befindet sich im aktuellen Verzeichnis. (Dies wird später für unser ASP.NET-Programm beschrieben. Führen Sie dies zunächst nur in der Konsolenanwendung aus, und dann werden wir über die ASP.NET Unterschiede sprechen.)

Sie sehen ein Fenster wie das hier gezeigte. (Dies gilt für die Visual Basic .NET-Version – die C#-Version ist sehr ähnlich.)

Abbildung 4. Anfänglicher ILDASM-Bildschirm nach der Eingabe von "ILDASM hellovbpause.exe"

Zunächst enthält die Struktur unter "hellovbpause.exe" zwei Teile: ein Manifest und die Klasse MyApp. Da das Modul hellovbpause.exe über ein Manifest verfügt, wissen wir, dass es sich um die Beschreibungsdatei für eine Assembly handelt. In diesem Fall besteht die Assembly nur aus einer Moduldatei, hellovbpause.exe.

Das Manifest

Wenn Sie auf das Manifest doppelklicken, wird ein kleiner Teil der Metadaten angezeigt. In diesem Teil werden die Module (Dateien) beschrieben, die in dieser Assembly (Anwendung oder Komponente) enthalten sind. Für unsere dritte hellovb.exe sieht es etwa wie folgt aus:

.assembly extern mscorlib
{
  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )     // .z\V.4..
  .ver 1:0:5000:0
}
.assembly extern Microsoft.VisualBasic
{
  .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A )     // .?_....:
  .ver 7:0:5000:0
}
.assembly hellovbpause
{
  .hash algorithm 0x00008004
  .ver 0:0:0:0
}
.module hellovbpause.exe
// MVID: {B8F34B08-AB79-4FD6-9B53-3A4792204A71}
.imagebase 0x00400000
.subsystem 0x00000003
.file alignment 512
.corflags 0x00000001
// Image base: 0x06bf0000

Diese Metadaten deklarieren einfach die Assembly hellovbpause, Version 0.0.0.0, als enthält das Modul (Datei) hellovbpause.exe, und besagt, dass sie die Assembly mscorlib, Version1:0:5000:0; die .NET-Runtime Standard DLL verwendet. (Die soeben gezeigte Visual Basic-Version weist auch einen ähnlichen Verweis auf die Assembly Microsoft.VisualBasic auf– C#-Programme verfügen nicht über diese, es sei denn, sie haben Typen in der Visual Basic-Runtime explizit verwendet.) Der Modulversionsbezeichner (Module Version Identifier, MVID) ist ein Globally Unique Identifier (GUID), der die ID für diese Version des Moduls hellovbpause.exe enthält.

Modulmetadaten

Wenn Sie den Moduldateinamen ("hellovbpause.exe") auswählen und STRG+M drücken, werden weitere Metadaten angezeigt– dieses Mal für das Modul, einschließlich der einzelnen Klassen und Methoden. (Beachten Sie, dass der gute Arzt in einem Versuch der Kürze vieles davon gelöscht hat.)

ScopeName : hellovbpause.exe
MVID      : {B8F34B08-AB79-4FD6-9B53-3A4792204A71}
===========================================================
Global functions
-------------------------------------------------------
Global fields
-------------------------------------------------------
Global MemberRefs
-------------------------------------------------------
TypeDef #1
-------------------------------------------------------
   TypDefName: MyApp  (02000002)
   Flags     : [Public] [AutoLayout] [Class] [AnsiClass]  (00000001)
   Extends   : 01000001 [TypeRef] System.Object
   Method #1 
   -------------------------------------------------------
      MethodName: .ctor (06000001)
      Flags     : [Public] [ReuseSlot] [SpecialName] [RTSpecialName] 
[.ctor]  (00001806)
      RVA       : 0x00002050
      ImplFlags : [IL] [Managed]  (00000000)
      CallCnvntn: [DEFAULT]
      hasThis 
      ReturnType: Void
      No arguments.

   Method #2 [ENTRYPOINT]
   -------------------------------------------------------
      MethodName: Main (06000002)
      Flags     : [Public] [Static] [ReuseSlot]  (00000016)
      RVA       : 0x00002058
      ImplFlags : [IL] [Managed]  (00000000)
      CallCnvntn: [DEFAULT]
      ReturnType: Void
      No arguments.
      CustomAttribute #1 (0c000001)
      -------------------------------------------------------
         CustomAttribute Type: 0a000004
         CustomAttributeName: System.STAThreadAttribute :: 
instance void .ctor()
         Length: 4
         Value : 01 00 00 00    >                <
         ctor args: ()

TypeRef #1 (01000001)
-------------------------------------------------------
Token:             0x01000001
ResolutionScope:   0x23000001
TypeRefName:       System.Object
   MemberRef #1
   -------------------------------------------------------
      Member: (0a000001) .ctor: 
      CallCnvntn: [DEFAULT]
      hasThis 
      ReturnType: Void
      No arguments.

TypeRef #2 (01000002)
-------------------------------------------------------
Token:             0x01000002
ResolutionScope:   0x23000001
TypeRefName:       System.Console
   MemberRef #1
   -------------------------------------------------------
      Member: (0a000002) WriteLine: 
      CallCnvntn: [DEFAULT]
      ReturnType: Void
      1 Arguments
         Argument #1:  String
   MemberRef #2
   -------------------------------------------------------
      Member: (0a000003) ReadLine: 
      CallCnvntn: [DEFAULT]
      ReturnType: String
      No arguments.

...

User Strings
-------------------------------------------------------
70000001 : (35) L"Hello world! (pause) (from VB .NET)"

Sie finden die Definition von MyApp (TypeDef #1) und die beiden Methoden, den Konstruktor und main. (Sie haben den Konstruktor nicht geschrieben, aber der Compiler hat ihn für Sie bereitgestellt.) Sie können auch Verweise auf die Objekte und Methoden sehen, auf die Ihr Programm verweist, z. B. System.Console und die zugehörigen WriteLine- und ReadLine-Methoden. Auch hier gibt es einige andere, die vom Compiler bereitgestellt werden, z . B. System.Object. Sie können sie betrachten, indem Sie hellovbpause.exe erstellen und ILDASM verwenden, um sie zu untersuchen. Der gute Arzt hat auch die Assembly- und Assembly-Referenzmetadaten entfernt, die meist das gerade gezeigte Manifest dupliziert. Schließlich sehen Sie die Zeichenfolgenkonstante, die wir in unserer WriteLine-Anweisung enthalten haben.

Es ist nicht wichtig, dass Sie dies alles jetzt verstehen, aber Dr. GUI wollte, dass Sie einige der Metadaten der ausführbaren Datei sehen. Er hofft, dass Sie sehen können, dass die Metadaten alle Informationen enthalten, die die Runtime und compiler über die Assembly und ihre Module, Typen und Member benötigen, z. B. Methoden.

Klassenmetadaten

Wenn Sie im Standard ILDASM-Fenster auf die MyApp-Klasse doppelklicken, werden die beiden Methoden der MyApp-Klasse angezeigt: der Konstruktor und der Main. Außerdem werden Metadaten für die -Klasse angezeigt.

In diesem Fall geben die Klassenmetadaten an (wenn Sie darauf doppelklicken), dass MyApp von System.Object geerbt wird, die Teil der mscorlib-Assembly ist:

.class public auto ansi MyApp
       extends [mscorlib]System.Object
{
} // end of class MyApp

Der IL-Code

Wenn Sie auf Main doppelklicken, wird dessen IL angezeigt:

.method public static void  Main() cil managed
{
  .entrypoint
  .custom instance void [mscorlib]System.STAThreadAttribute::.ctor() = ( 
01 00 00 00 ) 
  // Code size       17 (0x11)
  .maxstack  8
  IL_0000:  ldstr      "Hello world! (pause) (from VB .NET)"
  IL_0005:  call       void [mscorlib]System.Console::WriteLine(string)
  IL_000a:  call       string [mscorlib]System.Console::ReadLine()
  IL_000f:  pop
  IL_0010:  ret
} // end of method MyApp::Main

Beachten Sie, dass die IL einfach ist: Der Aufruf von Console.WriteLine besteht aus dem Pushen eines Zeigers auf eine Zeichenfolge im Stapel und dem Aufrufen der -Methode. In ähnlicher Weise ist der Aufruf von ReadLine einfach. Beachten Sie, dass der Rückgabewert nach dem Aufruf aus dem Stapel geknallt wird (und dann ignoriert wird). Schließlich kehrt Main zu seinem Aufrufer zurück. Sie können auch sehen, dass Main als Einstiegspunkt deklariert ist.

Die IL für den Konstruktor ist ebenso einfach:

.method public specialname rtspecialname 
        instance void  .ctor() cil managed
{
  // Code size       7 (0x7)
  .maxstack  8
  IL_0000:  ldarg.0
  IL_0001:  call       instance void [mscorlib]System.Object::.ctor()
  IL_0006:  ret
} // end of method MyApp::.ctor

Die ldarg.0-Anweisung kopiert den An diesen Konstruktor übergebenen Me-Zeiger (in C#) als Argument und ruft den Basisklasse-Konstruktor (System.Object) auf.

Jetzt einen Tausch durchführen...

Führen Sie als Nächstes die soeben beschriebenen Schritte aus, beginnendmit! im Weiter oben gezeigten SwapInts-Programm : Erstellen Sie die Quelldatei, kompilieren Sie sie, und führen Sie sie aus. Sehen Sie sich die Metadaten an, und notieren Sie sich die Parameterinformationen zur Swap-Funktion . Sehen Sie sich auch den IL-Code für den Aufruf von Swap und die Swap-Funktion an.

Im IL-Code für Main finden Sie einige Boxanweisungen . Da Console.WriteLine Objekte und nicht ganze Zahlen als Argumente nach der Formatierungszeichenfolge akzeptiert, müssen die ganzen Zahlen in Objekte konvertiert werden. Die Konvertierung eines Nicht-Objekttyps in ein Objekt wird als Boxing bezeichnet, und sie erfolgt in IL mit der Box-Anweisung .

Und versuchen wir es mit ASP.NET!

Als Nächstes sehen wir uns eines unserer ASP.NET-Programme an. Wenn Sie Ihr ASP.NET Programm noch nicht ausgeführt haben, verwenden Sie die Anweisungen im abschnitt ASP.NET Hallo Welt. Der gute Arzt empfiehlt Ihnen, das Visual Basic-Programm web swap einzurichten und auszuführen.

Das erste Problem, wenn Sie sich eine ASP.NET Assembly ansehen möchten, kann sein, es zu finden: Wenn Sie Ihre Dateien wie hier manuell bearbeiten, kompiliert ASP.NET Automatisch Ihren Code und legt die resultierende Assembly in einem Cacheverzeichnis ab. In dieser Spalte erfahren Sie, wie Sie das Cacheverzeichnis und Ihre Assembly finden.

Wenn Sie Visual Studio .NET zum Erstellen und Erstellen Ihres Programms verwenden, ist es einfach, die Assembly zu finden. Wenn Visual Studio Ihr Projekt erstellt, wird ein BIN-Verzeichnis im IIS-Verzeichnis Ihrer Webanwendung erstellt und die kompilierte Assembly dort abgelegt.

Wenn Sie Visual Studio nicht verwenden und das SRC-Attribut verwenden, um ASP.NET mitzuteilen, wo der Quellcode zu finden ist, speichert ASP.NET ihn in das Cacheverzeichnis. (Und ASP.NET die Assembly für die Webseite selbst in jedem Fall in diesem Cacheverzeichnis ablegt.)

Die einfachste (und zuverlässigste) Möglichkeit, die Datei zu finden, ist die Suche nach dem Quelldateinamen der Visual Basic- oder C#-Datei (z. B. "webswapvb.vb"). Stellen Sie sicher, dass Sie Systemordner durchsuchen.

Sie finden eine Datei mit einem Namen, der aus dem Namen der Quelldatei besteht, gefolgt von einigen zusätzlichen Inhalten und einer .xml-Erweiterung, z. B. webswapvb.vb.dbed68e8.xml. Diese Datei enthält den Basisnamen der Assembly. Öffnen Sie das Verzeichnis, das die datei .xml enthält, und öffnen Sie dann die Datei selbst in Editor. Das erste, was in der Datei angezeigt wird, ist ein PRESERVE-Tag mit einem ASSEM-Attribut . Dieser Wert dieses Attributs ist der Basisname der Assembly-DLL. Sie finden die DLL im selben Verzeichnis. Führen Sie daher ILDASM darauf aus.

Sie werden auch einige ähnliche .xml-Dateien bemerken, deren Namen mit dem Namen der ASPX-Datei beginnen. Sie können diese Dateien verwenden, um die Assemblys zu finden, in die die ASPX-Seite kompiliert ist, und dann können Sie ILDASM verwenden, um diese Assemblys zu betrachten. Darin finden Sie einen Namespace namens ASP; in diesem Namespace finden Sie Ihre Klasse, die von ASP.NET generiert und für Ihre ASPX-Seite benannt wurde.

Wenn die ASPX-Seite Über Inlinecode verfügt, wird die Seitenklasse von System.Web.UI.Page abgeleitet und enthält unter anderem eine Methode, die den einzelnen methoden entspricht, die in die ASPX-Seite eingebettet sind.

Wenn die ASPX-Seite Code Behind verwendet, wird die Seitenklasse von Ihrer Code-Behind-Klasse abgeleitet (die wiederum von System.Web.UI.Page abgeleitet ist), und die Methoden befinden sich in der Assembly, die Ihrem Code zugeordnet ist.

Der gute Arzt erwähnte bereits, dass der sehr einfache Aufruf von Swap im Visual Basic-Programm viel Code generiert, und er versprach, es anzuzeigen. Der Quellcode ist einfach (eine Zeile: Swap(I.Text, J.Text)), aber diese eine Zeile generiert eine große Menge an Code. Dies ist er:

.method private instance void  Button1_Click(object sender,
 class [mscorlib]System.EventArgs e) cil managed
{
  // Code size       52 (0x34)
  .maxstack  2
  .locals init (string V_0,
           class [System.Web]System.Web.UI.WebControls.TextBox V_1,
           string V_2,
           class [System.Web]System.Web.UI.WebControls.TextBox V_3)
  IL_0000:  ldarg.0
  IL_0001:  ldfld      class [System.Web]System.Web.UI.WebControls.TextBox_
 SwapWebFormVb::I
  IL_0006:  stloc.3
  IL_0007:  ldloc.3
  IL_0008:  callvirt   instance string_ 
[System.Web]System.Web.UI.WebControls.TextBox::get_Text()
  IL_000d:  stloc.2
  IL_000e:  ldloca.s   V_2
  IL_0010:  ldarg.0
  IL_0011:  ldfld      class [System.Web]System.Web.UI.WebControls.TextBox_ 
SwapWebFormVb::J
  IL_0016:  stloc.1
  IL_0017:  ldloc.1
  IL_0018:  callvirt   instance string_ 
[System.Web]System.Web.UI.WebControls.TextBox::get_Text()
  IL_001d:  stloc.0
  IL_001e:  ldloca.s   V_0
  IL_0020:  call       void SwapWebFormVb::Swap(string&,
                                                string&)
  IL_0025:  ldloc.1
  IL_0026:  ldloc.0
  IL_0027:  callvirt   instance void_ 
[System.Web]System.Web.UI.WebControls.TextBox::set_Text(string)
  IL_002c:  ldloc.3
  IL_002d:  ldloc.2
  IL_002e:  callvirt   instance void_ 
[System.Web]System.Web.UI.WebControls.TextBox::set_Text(string)
  IL_0033:  ret
} // end of method SwapWebFormVb::Button1_Click

Viel Spaß beim Anschauen Ihrer ASP.NET Programme!

Suchen, was Sie in der Dokumentation benötigen

In Visual Studio .NET und dem .NET Framework SDK ist eine enorme Menge an Dokumentation enthalten. Die Suche nach dem, was Sie benötigen, kann jedoch manchmal eine Herausforderung sein, da es drei überlappende Dokumentationssätze gibt: MSDN Online, die .NET SDK-Dokumentation und die Visual Studio .NET-Dokumentation. Die meisten Dokumentationen befinden sich in allen Sätzen, aber Sie finden Dinge häufig an verschiedenen Stellen in den verschiedenen Gruppen.

MSDN Online

Sie können auf die MSDN Online-Dokumentation von jedem Computer aus zugreifen, der mit dem Internet verbunden ist. Um die Informationen zu finden, die Sie wahrscheinlich für .NET Framework Programmierung benötigen, müssen Sie den Link .NET-Entwicklung auf der rechten Seite der MSDN-Startseite verwenden. Dadurch gelangen Sie zum .NET Framework Developer Center.

Unter dem Knoten .NET-Entwicklung auf oberster Ebene auf der linken Seite finden Sie den Visual Studio .NET-Knoten und den Knoten .NET Framework SDK, der den .NET Framework Knoten enthält. Unter dem Knoten .NET Framework finden Sie die meisten Dokumentationen für das Framework selbst. Sprachverweise finden Sie unter .NET Development\.NET Framework SDK\.NET Framework\Reference\Compiler and Language Reference. Dies ist der einzige Ort, an dem Sie aktuelle Versionen von Dr. GUI .NET 1.1 finden können (unter .NET Development\.NET Development (General)\Columns\Dr. GUI .NET).

.NET Framework SDK-Dokumentation

Wenn Sie das .NET Framework SDK installieren (oder wenn Visual Studio .NET Setup es für Sie installiert), finden Sie Links zu allen Dokumentationen im Startmenü unter .NET Framework SDK v1.1. Der Link Übersicht ist ein guter Ausgangspunkt– er ist der einzige Ort, an dem Links zu der gesamten Dokumentation enthalten sind, auch zum Tool Developer's Guide (mit der IL-Anweisungsreferenz als Teil der ECMA-Spezifikation). Beachten Sie, dass die einzige Möglichkeit zum Aufrufen der Seiten des Toolentwicklerhandbuchs diese Übersicht ist. Die .NET Framework SDK-Dokumentation enthält jedoch keine Informationen zur Verwendung von Visual Studio selbst.

Wenn Sie im Startmenü auf das Symbol .NET Framework SDK v1.1/Dokumentation klicken, erhalten Sie die .NET Framework SDK-Hilfedatei. Diese Datei enthält im Grunde dieselben Dokumentationsknoten wie der Knoten .NET Development\.NET Framework SDK\Product Documentation\ in MSDN Online und der knoten .NET Framework in Visual Studio .NET.

Web Matrix-Dokumentation

Web Matrix verfolgt einen anderen Ansatz bei der Dokumentation: Anstatt die Dokumentation in Web Matrix einzugliedern, enthält sie nur Links zu den entsprechenden Dokumentationssätzen im Internet. Jedes Mal, wenn Sie um Hilfe bitten, löst Web Matrix internet Explorer aus und lädt eine Seite – und fast alle Seiten stammen von einer Live-Website.

Dies hat den Vorteil, dass der Webmatrix-Download kleiner sein kann, da keine Dokumentation enthalten sein muss. Der Nachteil ist, dass Sie keinen Zugriff auf die Dokumentation über Web Matrix haben, wenn Sie derzeit keine funktionierende Verbindung mit dem Internet haben.

Was ist, wenn Sie arbeiten möchten, während Sie nicht verbunden sind? Eigentlich ist es einfach: Laden Sie einfach das .NET Framework SDK herunter, und verwenden Sie die Darin enthaltene Dokumentation. Mit Ausnahme der Dokumentation zur Verwendung von Web Matrix selbst finden Sie alles, was Sie benötigen, in der .NET Framework SDK-Dokumentation.

Oder kaufen Sie einfach eines der Visual-Sprachprodukte oder Visual Studio, und erhalten Sie alles.

Visual Studio .NET-Dokumentation

Wenn Sie Visual Studio erworben und installiert haben, können Sie die Dokumentation aus der IDE abrufen. Die Visual Studio-Dokumentation enthält alle Informationen zur Verwendung von Visual Studio sowie fast alle soeben erwähnten Informationen. Sie können die Sprachdokumentation entweder über den knoten .NET Framework SDK oder den einzelnen Sprachknoten unter dem Standard Visual Studio .NET-Knoten abrufen.

Beachten Sie, dass auf dem KNOTEN MSDN Library der Knoten .NET-Entwicklung (sowie die Knoten Netzwerk- und Verzeichnisdienste, XML-Webdienste und MSDN Archive) fehlen. Die meisten dieser Informationen befinden sich unter dem Visual Studio .NET-Knoten, aber einige (wie die überarbeitete Dr. GUI .NET 1.1) sind nur online verfügbar.

Zusammenfassung der Dokumentation

Manchmal kann es schwierig sein, das zu finden, was Sie in der Dokumentation benötigen. Es gibt einige Informationen, die nur online verfügbar sind, und einige, die nur im .NET Framework SDK verfügbar sind (die jeder Benutzer, der für die .NET Framework programmiert, entweder eigenständig oder mit Visual Studio .NET installiert haben sollte). Wie bei jedem großen neuen Dokumentsatz dauert es ein wenig Zeit, sich daran zu gewöhnen. Im Allgemeinen verfügt Visual Studio jedoch über den vollständigsten Satz (abzüglich des Toolentwicklerhandbuchs und der erwähnten MSDN Online-Knoten).

Verwenden Sie also ein wenig Zeit, um die Dokumentation zu durchsuchen, um zu sehen, was enthalten ist – Sie werden erstaunt sein, wie viel Zeug es gibt!

Selbst mehr tun...

Wenn Sie etwas mehr Zeit haben, ändern Sie die Programme, die Sie hier haben, um etwas zu tun, das Für Sie interessant ist, führen Sie sie aus, und untersuchen Sie sie mit ILDASM. Um dabei zu helfen, verwenden Sie die Dokumentation. Sie sollten sich insbesondere die folgenden Abschnitte ansehen:

  • Beispiele und Exemplarische Vorgehensweisen unter Visual Studio .NET im Visual Studio-Hilfesystem
  • Schnellstarts unter dem Knoten .NET Framework SDK in allen Dokumentationsgruppensystemen
  • Compiler- und Sprachreferenz
  • .NET Framework-Verweis
  • .NET Framework Entwicklerhandbuch (verwenden Sie im Startmenü die .NET Framework SDK v1.1\Overview)
  • IL-Anweisungsreferenz (Um "Partition III CIL" zu finden, klicken Sie im Startmenü auf der Seite übersicht des .NET Framework SDK auf das Handbuch für Toolentwickler, und klicken Sie dann auf Dokumentation.)

Kommen Sie zu uns!

Wie bereits erwähnt, gibt es ein Dr. GUI .NET Message Board (oder Forum), das von GotDotNet für Leser dieser Spalte gehostet wird. Sie befindet sich unter http://gotdotnet.com/community/messageboard/MessageBoard.aspx?id=46. Hier können Sie Fragen zu dieser Spalte stellen und diskutieren, und Sie finden den Code. Bitte machen Sie mit, stellen Sie Ihre Fragen und teilen Sie das Gelernte mit anderen!

Weitere Informationen

Wenn Sie wirklich schnell auf .NET einsteigen möchten, lesen Sie etwas oder nehmen Sie einen Kurs. Dr. GUI nahm einen hervorragenden Kurs von Autor Jeffrey Richter von Wintellect (http://www.wintellect.com/). Jeff weiß wirklich seine Sachen und wie man es gut erklärt, und der gute Arzt profitierte sehr von Jeffs Kurs - wie diese Reihe von Artikeln. (Dr. GUI gibt jedoch zu, dass er eifersüchtig ist, dass Jeff im selben Gebäude wie das .NET-Runtime-Team und Dr. GUI nicht arbeiten konnte.) Andere Unternehmen, wie z. B . DevelopMentor, bieten ebenfalls Kurse und Ressourcen an.

Jeffs Buch Applied Microsoft .NET Framework Programming ist besonders gut. Es gibt zwei Versionen – eine für C#, eine für Visual Basic .NET (https://microsoft.com/mspress/books/6199.asp). Es konzentriert sich auf das Framework und die Ausführungsumgebung und gibt Ihnen wirklich den Hintergrund, den Sie benötigen, um genau zu verstehen, was vor sich geht. Dr. GUI hat dieses Buch vor der Veröffentlichung überprüfen und empfiehlt es von Herzen. Es ist wirklich hervorragend. Das einzige Manko ist, dass es nicht für die Version 1.1 .NET Framework aktualisiert wurde.

Wenn Sie an den Ins und Outs der IL-Sprache interessiert sind, lesen Sie Inside Microsoft .NET IL Assembler von Serge Lidin unter https://microsoft.com/mspress/books/5771.asp.

Es gibt heutzutage eine große Vielfalt an Büchern, einschließlich gedruckter Versionen der Referenzdokumentation (ENDLICH!). Sehen Sie sich alle Angebote von Microsoft Press unter an https://www.microsoft.com/mspress/net/framework/.

Es gibt auch eine Reihe von .NET-Mailinglisten und eine neue Gruppe von Microsoft-Newsgroups. Die Mailinglisten von DevelopMentor sind sehr ausgelastet, aber Sie können die Archive im Web durchsuchen.

Sie sollten auch regelmäßig das MSDN .NET Developer Center besuchen, um sich über .NET und Ressourcen auf dem neuesten Stand zu halten, um sich darüber zu informieren.

Außerdem sollten Sie regelmäßig die GotDotNet-Website vom .NET Framework Entwicklungsteam besuchen.

Was wir getan haben; Was kommt als nächstes

Dieses Mal haben wir ein wenig darüber gesprochen, was .NET ist – insbesondere über die .NET Framework und die Runtime – und warum Sie sich darum kümmern könnten. Wir haben auch darüber gesprochen, wie Sie das .NET Framework SDK und/oder Visual Studio .NET abrufen und installieren, und haben einige einfache Programme an der Befehlszeile und in ASP.NET ausgeführt. Schließlich haben wir uns die Metadaten und die IL für diese Programme angesehen und uns ein wenig Zeit mit der Dokumentation beschäftigt.

Es war ein langer Artikel, aber Dr. GUI verspricht, dass zukünftige Artikel kürzer sein werden. Wirklich.

Beim nächsten Mal werden wir die grundlegende Einheit der .NET Framework – Typen – besprechen, während wir eine kurze Übersicht über die objektorientierte Programmierung durchführen, einschließlich der neuen Features, die das .NET Framework bietet.