Dieser kleine Artikel richtet sich an Anfänger, aber auch an Fortgeschrittene. Es wird im ersten Teil auf die Unzulänglichkeiten der Sprache VB.NET eingegangen und ein Vergleich zu C# vorgenommen. Im zweiten Teil dieses Artikels werden Möglichkeiten gezeigt, um die Unzulänglichkeiten von VB abzustellen.
Leider führt die Sprache VB.NET ein Dasein im Schatten von C#. Ohne Zweifel, C# ist die .NET-Sprache. Sie ist syntaktisch angelehnt an C++ und ist standardmäßig moderner als VB.NET. VB schleppt leider jede Menge Altlasten/Vereinfachungen mit sich, die vor allem für Einsteiger meist sehr verführerisch sind. Dies sind beispielsweise die voreingestellte Compiler-Option: OPTION STRICT OFF, der Microsoft.VisualBasic-Namespace und der My-Namespace.
OPTION STRICT OFF:
C# kennt diese Option nicht. In C# ist es zwingend erforderlich, typsicher zu programmieren.
In der Standard-Einstellung erlaubt es VB.NET tatsächlich, daß ein String (definiert durch "") als Zahl gesehen wird. In C# würde dies zu einem Compiler-Fehler führen und das Programm würde nicht starten.
C# hat hier vollkommen recht. Wie soll eine Zeichenfolge auch jemals eine gültige Zahl sein? Eine Zeichenfolge kann ebenso Buchstaben beinhalten. Spätestens hier würde das VB.NET-Programm mit einem Laufzeitfehler abstürzen.
Dieser Laufzeit-Fehler wäre in C# niemals in dieser Art aufgetreten, da der Compiler keine selbständigen Konvertierungen vornimmt und dies mit Fehlern anmahnt.
Um dieses Fehlverhalten des VB-Kompilers zu beheben, bedarf es nur der Aktivierung der Compiler-Option OPTION STRICT auf ON.
Hier verhindert OPTION STRICT ON, analog zu C#, eine automatische Konvertierung und zeigt die entsprechenden Fehlermeldungen. Das Programm lässt sich nicht kompilieren und der oben gezeigte Laufzeitfehler würde auch in VB.NET nicht mehr auftreten, da diese Fehler behoben werden müssen.
OPTION STRICT OFF macht es leider möglich, jeden erdenklichen Fehler machen zu dürfen, ohne ihn überhaupt zu sehen. Ans Tageslicht treten diese Fehler dann zur Laufzeit und hat meist einen Programmabsturz zur Folge.
OPTION STRICT ON ist eine zwingende Maßnahme, um auf Augenhöhe mit C# zu kommen und um überhaupt ein Verständnis für Datentypen zu bekommen.
Microsoft.VisualBasic-Namespace:
Wie es der Name schon andeutet, kennt C# diesen Namespace nicht. Er ist standardmäßig in VB.NET importiert und beinhaltet durch die Bank nur alte Methoden und Funktionen, die in der .NET-Welt nichts mehr verloren haben. Diese Methoden und Funktionen sind nicht selten langsamer und im Grunde umständlicher als die .NET-Gegenstücke. Was hier am schwersten wiegt ist der Umstand, dass diese Altlasten das Prinzip der OOP missachten. Mitgeliefert wird diese Sammlung nur noch aus Kompatibilitätsgründen (meine Annahme).
C# kennt diese Befehle nicht und das ist auch gut so.
Um zu C# aufzuschließen gilt es, den Microsoft.VisualBasic-Namespace aus seinen Projekten zu entfernen und die OOP konformen .NET-Gegenstücke zu nutzen.
My-Namespace:
Wie zu erwarten war, gibt es auch diesen Namespace in C# nicht. Leider gibt es auch keinen mir bekannten Weg, diesen Namespace aus seinen Projekten zu verbannen. Der My-Namespace vereinfacht im Grunde einige Funktionen des Frameworks. Intern werden m. W. n. die .NET Klassen/Methoden/Funktionen genutzt (dies aber ohne Gewähr). Diese gekapselten Methoden und Funktionen bieten leider nicht den vollen Funktionsumfang der vollwertigen .NET-Gegenstücke. Somit sollte man diesen Namespace einfach meiden. Leider ermöglicht es gerade dieser Namespace, daß Forms ohne konkrete Instanzen aufgerufen werden können. Siehe hier diesen Artikel: Instanziierung von Forms und Aufruf von Dialogen
In C# sind diese Aufrufe unbekannt
In VB.Net bessesr gelöst durch die direkte Nutzung der Klassen/Funktionen/Methoden.
Sieht man sich diesen Code oben genauer an, so wird man feststellen, dass hier viel mehr Möglichkeiten gegeben sind, als durch den My-Namespace-Aufruf. Beispielsweise gibt die Klasse Ping mehr Informationen zurück, als True/False. Hier sind alle möglichen Werte gekapselt, die sich mit Sicherheit auszahlen.
VB.NET moderner und näher an C#
Dies waren die 3 markantesten Unterschiede (abgesehen von der Syntax) zwischen VB und C#. Wie behebt man nun diese augenscheinlichen Unzulänglichkeiten von VB? Genannt wurde: OPTION STRICT ON und der Verzicht auf den VisualBasic-Namespace, sowie My-Namespace. Für die beiden erstgenannten biete ich euch hier eine Lösung. Für den My-Namespace gibt es, wie erwähnt, keine andere Möglichkeit, als ihn einfach links liegen zu lassen.
Dieses Video zeigt, wie OPTION STRICT global aktiviert wird. Sprich, nach dieser kleinen Einstellung wird in allen neu erstellten Projekten die zwingende Typsicherheit aktiv sein. Für bereits erstellte Projekte müsst ihr diese Option unter "My Project" im Projektmappen-Explorer nachträglich einschalten. My Project => Kompilieren.
Das zweite Video zeigt, wie ihr den VisualBasic-Namespace aus zukünftigen Projekten verbannt und euch daraufhin eine Projekt-Vorlage erstellt. Nutzt in Zukunft nur noch diese erstellte Vorlage und ihr kommt mit diesem Namespace nicht mehr in Kontakt. Ihr könnt eure Vorlage nach Belieben konfigurieren. Beispielsweise könnt ihr zusätzliche Verweise setzen oder Namespaces standardmäßig importieren.
Beherzigt ihr diese Vorschläge, so helft ihr erstens euch selbst, besser zu programmieren und ihr helft auch der Sprache VB etwas besser angesehen zu werden. Denn VB steht C# im Grunde in nichts nach. Letztendlich bleibt bei der Wahl der Sprache die Frage, welcher Syntax einem besser liegt.
Leider führt die Sprache VB.NET ein Dasein im Schatten von C#. Ohne Zweifel, C# ist die .NET-Sprache. Sie ist syntaktisch angelehnt an C++ und ist standardmäßig moderner als VB.NET. VB schleppt leider jede Menge Altlasten/Vereinfachungen mit sich, die vor allem für Einsteiger meist sehr verführerisch sind. Dies sind beispielsweise die voreingestellte Compiler-Option: OPTION STRICT OFF, der Microsoft.VisualBasic-Namespace und der My-Namespace.
OPTION STRICT OFF:
C# kennt diese Option nicht. In C# ist es zwingend erforderlich, typsicher zu programmieren.
In der Standard-Einstellung erlaubt es VB.NET tatsächlich, daß ein String (definiert durch "") als Zahl gesehen wird. In C# würde dies zu einem Compiler-Fehler führen und das Programm würde nicht starten.
C# hat hier vollkommen recht. Wie soll eine Zeichenfolge auch jemals eine gültige Zahl sein? Eine Zeichenfolge kann ebenso Buchstaben beinhalten. Spätestens hier würde das VB.NET-Programm mit einem Laufzeitfehler abstürzen.
Dieser Laufzeit-Fehler wäre in C# niemals in dieser Art aufgetreten, da der Compiler keine selbständigen Konvertierungen vornimmt und dies mit Fehlern anmahnt.
Um dieses Fehlverhalten des VB-Kompilers zu beheben, bedarf es nur der Aktivierung der Compiler-Option OPTION STRICT auf ON.
Hier verhindert OPTION STRICT ON, analog zu C#, eine automatische Konvertierung und zeigt die entsprechenden Fehlermeldungen. Das Programm lässt sich nicht kompilieren und der oben gezeigte Laufzeitfehler würde auch in VB.NET nicht mehr auftreten, da diese Fehler behoben werden müssen.
OPTION STRICT OFF macht es leider möglich, jeden erdenklichen Fehler machen zu dürfen, ohne ihn überhaupt zu sehen. Ans Tageslicht treten diese Fehler dann zur Laufzeit und hat meist einen Programmabsturz zur Folge.
OPTION STRICT ON ist eine zwingende Maßnahme, um auf Augenhöhe mit C# zu kommen und um überhaupt ein Verständnis für Datentypen zu bekommen.
Microsoft.VisualBasic-Namespace:
Wie es der Name schon andeutet, kennt C# diesen Namespace nicht. Er ist standardmäßig in VB.NET importiert und beinhaltet durch die Bank nur alte Methoden und Funktionen, die in der .NET-Welt nichts mehr verloren haben. Diese Methoden und Funktionen sind nicht selten langsamer und im Grunde umständlicher als die .NET-Gegenstücke. Was hier am schwersten wiegt ist der Umstand, dass diese Altlasten das Prinzip der OOP missachten. Mitgeliefert wird diese Sammlung nur noch aus Kompatibilitätsgründen (meine Annahme).
C# kennt diese Befehle nicht und das ist auch gut so.
Um zu C# aufzuschließen gilt es, den Microsoft.VisualBasic-Namespace aus seinen Projekten zu entfernen und die OOP konformen .NET-Gegenstücke zu nutzen.
My-Namespace:
Wie zu erwarten war, gibt es auch diesen Namespace in C# nicht. Leider gibt es auch keinen mir bekannten Weg, diesen Namespace aus seinen Projekten zu verbannen. Der My-Namespace vereinfacht im Grunde einige Funktionen des Frameworks. Intern werden m. W. n. die .NET Klassen/Methoden/Funktionen genutzt (dies aber ohne Gewähr). Diese gekapselten Methoden und Funktionen bieten leider nicht den vollen Funktionsumfang der vollwertigen .NET-Gegenstücke. Somit sollte man diesen Namespace einfach meiden. Leider ermöglicht es gerade dieser Namespace, daß Forms ohne konkrete Instanzen aufgerufen werden können. Siehe hier diesen Artikel: Instanziierung von Forms und Aufruf von Dialogen
VB.NET-Quellcode
- Public Class Form1
- Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
- Dim s As String = My.Computer.FileSystem.ReadAllText("test.txt")
- Dim result As Boolean = My.Computer.Network.Ping("www.google.de")
- Dim r As Rectangle = My.Computer.Screen.WorkingArea
- End Sub
- End Class
In C# sind diese Aufrufe unbekannt
In VB.Net bessesr gelöst durch die direkte Nutzung der Klassen/Funktionen/Methoden.
VB.NET-Quellcode
- Imports System.IO
- Imports System.Net.NetworkInformation
- Public Class Form1
- Private Async Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
- Dim s As String = File.ReadAllText("test.txt")
- Dim result As PingReply = Await New Ping().SendPingAsync("www.google.de")
- MessageBox.Show(result.Status.ToString())
- MessageBox.Show(result.RoundtripTime.ToString())
- Dim r As Rectangle = Screen.PrimaryScreen.WorkingArea
- End Sub
- End Class
Sieht man sich diesen Code oben genauer an, so wird man feststellen, dass hier viel mehr Möglichkeiten gegeben sind, als durch den My-Namespace-Aufruf. Beispielsweise gibt die Klasse Ping mehr Informationen zurück, als True/False. Hier sind alle möglichen Werte gekapselt, die sich mit Sicherheit auszahlen.
VB.NET moderner und näher an C#
Dies waren die 3 markantesten Unterschiede (abgesehen von der Syntax) zwischen VB und C#. Wie behebt man nun diese augenscheinlichen Unzulänglichkeiten von VB? Genannt wurde: OPTION STRICT ON und der Verzicht auf den VisualBasic-Namespace, sowie My-Namespace. Für die beiden erstgenannten biete ich euch hier eine Lösung. Für den My-Namespace gibt es, wie erwähnt, keine andere Möglichkeit, als ihn einfach links liegen zu lassen.
Dieses Video zeigt, wie OPTION STRICT global aktiviert wird. Sprich, nach dieser kleinen Einstellung wird in allen neu erstellten Projekten die zwingende Typsicherheit aktiv sein. Für bereits erstellte Projekte müsst ihr diese Option unter "My Project" im Projektmappen-Explorer nachträglich einschalten. My Project => Kompilieren.
Das zweite Video zeigt, wie ihr den VisualBasic-Namespace aus zukünftigen Projekten verbannt und euch daraufhin eine Projekt-Vorlage erstellt. Nutzt in Zukunft nur noch diese erstellte Vorlage und ihr kommt mit diesem Namespace nicht mehr in Kontakt. Ihr könnt eure Vorlage nach Belieben konfigurieren. Beispielsweise könnt ihr zusätzliche Verweise setzen oder Namespaces standardmäßig importieren.
Beherzigt ihr diese Vorschläge, so helft ihr erstens euch selbst, besser zu programmieren und ihr helft auch der Sprache VB etwas besser angesehen zu werden. Denn VB steht C# im Grunde in nichts nach. Letztendlich bleibt bei der Wahl der Sprache die Frage, welcher Syntax einem besser liegt.
Die Unendlichkeit ist weit. Vor allem gegen Ende.
Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken.
Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken.