Hallo,
es gibt natürlich viele unterschiedliche Meinungen darüber, aber ich selbst habe früher auch mit VB6 angefangen, bin dann im Rahmen des Studiums auf Java umgestigen und programiere jetzt fast nur noch in C#/Java (und bin ehrlich gesagt froh, dass ich mich nicht mehr mit der VB-Syntax herumschlagen muss ).
C# ist ja eine Sprache, die speziell fürs .Net-Framework neu entwickelt wurde (sie ist sozusagen die "Referenzsprache" des Frameworks). Bei VB.Net dagegen habe ich irgendwie den Eindruck, dass als Sprachgrundlage die VB6-Syntax + Spracheigenschaften hergenommen wurde und es irgendwie ins .Net-Framework "hineingequetscht" wurde (vermutlich um es VB6-Umsteigern einfacher zu machen, direkt die neue Plattform zu verwenden, ohne sich erst mit einer neuen Sprachsyntax usw. beschäftigen zu müssen). In VB.Net fehlen einige Sachen, die es in C# gibt, und mein Eindruck ist auch, dass es manchmal eine etwas unständliche Syntax hat und VB.Net-Code stellenweise schwerer zu lesen ist als C#-Code.
In VB.Net wurden beispielsweise globale VB6-Funktionen wie Len(), Mid(), Now() usw. übernommen, die man im dortigen Code benutzen kann, obwohl dies eigentlich nicht der OOP-Weg ist, den .Net vorgibt, denn dort gibt es keine globalen Funktionen. Die genannten Funktionen sind eigentlich auch statische (Shared in VB) Methoden der Klassen im Microsoft.VisualBasic-Namespace, die in VB.Net direkt importiert werden - besser wäre es allerdings, die entsprechenden Funktionen zu verwenden, die von den .Net-Objekten bereitgestellt werden (z.B. "Bla".Length statt Len("Bla")).
Es gibt in VB.Net auch Standardinstanzen von Forms, so wie es auch in VB6 war, obwohl dies den OOP-Paradigmen widerspricht (es wird auch als schlechter Stil angesehen, Standardinstanzen zu verwenden). In C# kommt man erst gar nicht in die Versuchung, Standardinstanzen von Formen zu verwenden, da es die dort nicht gibt.
In VB.Net gibt es auch keine Unterscheidung zwischen out- und ref-Parametern in Methoden, da dort Variablen immer sofort den Standartwert zugewiesen bekommen, auch wenn man sie ohne Wert deklariert. Anonyme Methoden, die es in C# seit dem FW 2.0 gibt, lassen sich in VB.Net (soweit ich weiß, bin mir da nicht 100% sicher) erst seit dem FW 4.0 mittels Lambda-Ausdrücken implementieren.
VB.Net hat viele Operatoren, die ausgeschrieben werden müssen und dadurch manchmal die Lesbarkeit verschlechtern. Z.B.
Dim bla As List(Of Integer) = DirectCast(GetMyList(), List(Of Integer))
AddHandler Button1.Click, AddressOf Btn1Click liest sich (zumindest für mich) etwas schwerer (und ist mehr Tipparbeit ) als
List<int> bla = (List<int>) GetMyList();
Button1.Click += Btn1Click; .
VB6 stammte auch aus der Pascal-Sprachfamilie, wo beispielsweise bei Arraydeklarationen nicht die Anzahl der Elemente, sondern die Obergrenze angegeben wurde. Wenn man in VB6 ein Array mit 5 Elementen deklariert und es anschließend durchläuft, sieht die typische Schleife so aus:
Dim myArray(0 To 4) as Long ' 5 Elemente mit Indizes 0 - 4
Dim i as Long
For i = LBound(myArray) To UBound(myArray)
'...
Next Bei den C-artigen Sprachen dagegen deklariert man ein Array über die Anzahl der Elemente; dies wurde auch im Framework beispielsweise für die .Length-Eigenschaft eines Arrays übernommen, das die Anzahl der Elemente enthält. In C# sieht eine typische Schleife dafür so aus:
int[] myArray = new int[5]; // 5 Elemente
for (int i = 0; i < myArray.Length; i++) {
// ...
} VB.Net verwendet jetzt zwar die Klassen des Frameworks, aber z.B. die For-Schleife aus Vb6, wo die andere Grenze inklusive ist. Man müsste in VB.Net die Schleife deshalb so schreiben:
Dim myArray As Integer() = New Integer(4) {} '5 Elemente
For i As Integer = 0 To myArray.Length - 1
'...
Next Wichtig ist hier das "- 1", denn .Lenght gibt 5 zurück, obwohl das höchste Element den Index 4 hat. Da man in C-typischen for-Schleifen immer eine Bedindung wie "i < x" verwendet, braucht man dort das "- 1" nicht (aber gut, das ist auch ein bisschen Gescmackssache, wie schwer es wiegt, dass man da immer -1 schreiben muss ).
In VB.Net sollte man auch immer "Option Strict On" verwenden, da man sonst Variablen vor der Verwendung nicht deklarieren muss, was aber nicht als saubere Programmierung angesehen wird. Mit dem angegebenen Statement wird im VB.Net-Code wie in C# erzwungen, dass Variablen vor der Verwendung immer deklariert werden.
Wenn dir allerdings trotzdem die VB-Syntax lieber ist, kannst du natürlich auch VB.Net verwenden.
Beitrag wurde zuletzt am 13.01.12 um 15:42:04 editiert. |