C# oder Visual Basic? Die richtige Programmiersprache fĂĽr .NET-Entwickler

Seite 2: Unterschiede

Inhaltsverzeichnis

Tabelle 2 zeigt die wichtigsten Unterschiede zwischen den beiden Sprachen. Visual-Basic-Code ist tendenziell etwas länger als C#-Code, denn Blöcke lassen sich nicht mit geschweiften Klammern, sondern mit Wörtern (zum Beispiel "Class... End Class, For....Next") bilden. Viele Wörter sind in Visual Basic sprechender: "MustInherit" statt "abstract", "NotInheritable" statt "sealed", "Overridable" statt "virtual".

Die Objektorientierung (OO) ist in beiden Sprachen gleich ausgeprägt. In Visual Basic könnte man den OO-Stil aber durch die exzessive Verwendung des Schlüsselwortes "Module" an vielen Orten umgehen. In C# gibt es das gleiche Konstrukt, es heißt dort "static class". Da man zusätzlich in C# vor jedes Klassenmitglied "static" schreiben muss, ist die Hemmschwelle etwas höher als in Visual Basic.

Bei der Typisierung läuft der Visual Basic Compiler von Hause aus in einem weniger strengen Modus. Die beiden folgenden Zuweisungen akzeptiert der Compiler, zur Laufzeit steht das Programm aber in der zweiten Zeile mit einer "InvalidCastException".

  Dim s As String = 5
Dim i As Int16 = "5s"

Aktivieren der strengeren TypprĂĽfung im Visual Basic Compiler (Abb. 1)

Das vermeidet man einfach, indem man den Visual-Basic-Compiler in den strengeren Modus schaltet (Option Strict) (siehe Abb. 1). In C# gibt es nur diesen strengen Modus.

C# steht in der Tradition von C++ beziehungsweise Java und unterscheidet daher – anders als Visual Basic – zwischen Groß- und Kleinschreibung. Da es gemäß Common Language Specification (CLS) sowieso keine Schnittstellen geben darf, die zwischen zwei Bezeichnernamen nur durch Groß- und Kleinschreibung zu unterscheiden sind, ist die Groß- und Kleinschreibung in C# kein funktionaler Vorteil, sondern nur eine Frage des Geschmacks.

Der in Visual Studio mitgelieferte Editor für Visual Basic war immer etwas besser als der für C#. Beispielsweise fügt der Visual-Basic-Editor automatisch das Blockende in den Code ein, während man bei C# explizit eine schließende Klammer eingeben muss (dafür braucht man Zusatzwerkzeuge wie Resharper).

Bei der Geschwindigkeit gibt es keine Unterschiede: Beide Sprache erzeugen die Microsoft Intermediate Language (alias Common Intermediate Language), die der Just-In-Time-Compiler ausführt. Kleine Unterschiede gibt es in dem erzeugten Zwischencode, die aber zu vernachlässigen sind.

Ein funktionaler Unterschied liegt in der UnterstĂĽtzung fĂĽr Zeigerarithmetik im Stil von C++ vor, die es in C# gibt, nicht aber in Visual Basic. Die Tatsache, dass der Entwickler vor jedem Zeigerarithmetikeinsatz das SchlĂĽsselwort "unsafe" verwenden und zudem den Compiler in einen "unsafe"-Modus schalten muss, sagt alles ĂĽber die Bedeutung dieser Funktion aus.

Der Rest der Unterschiede sind rein syntaktische ZuckerstĂĽckchen, das heiĂźt vereinfachte Ausdrucksformen fĂĽr Funktionen, die auch anders zu erreichen sind.

Ein Beispiel, bei dem Visual Basic klar gewinnt, ist das späte Binden. In C# braucht man hier Reflection (Abb. 2 und 3).

Spätes Binden in Visual Basic 2008 (Abb. 2)

Spätes Binden in C# 2008 (Abb. 3)

Hingegen kann man in C# im Moment Properties viel prägnanter deklarieren als in Visual Basic, wobei man auf eine explizite Vergabe von Namen für die privaten Mitglieder verzichtet (Abbildung 4 und 5). Beide Unterschiede verschwinden übrigens in der nächsten Version.

Eine Klasse mit vier Properties in Visual Basic 2008 (Abb. 4)

In C# 2008 kann man das wesentlich kĂĽrzer schreiben (Abb. 5).

Einen klaren Vorteil, den Visual Basic in .NET 4.0 behält, sind die XML-Literale (Abb. 6). Man kann XML-Tags direkt in die Sprache einbetten. In C# müsste man viel umständlicher immer wieder Bezug nehmen auf die Klasse "Xelement".

XML-Literale in Visual Basic 2008 (Abb. 6)

Die nächsten Versionen der beiden .NET-Hauptsprachen erscheinen zusammen mit .NET 4.0 und Visual Studio 2010 Anfang des nächsten Jahres. Hauptneuerung in C# 4.0 ist das dynamische Programmieren. Eine mit dem Schlüsselwort "dynamic" deklarierte Variable löst nicht mehr der Compiler, sondern die CLR zur Laufzeit auf. In Visual Basic gab es dieses späte Binden schon zu Zeiten des klassischen Visual Basic durch den Typ "Object"; in C# ging das bisher nur umständlich über die Reflection-Bibliothek. Die dynamische Programmierung bietet Vorteile beim Umgang mit COM-Objekten und im Zusammenspiel mit dynamischen Programmiersprachen wie Python und Ruby. Auch mit optionalen und benannten Parametern zieht C# endlich gleich mit Visual Basic. Neu sind hingegen Co- und Contravarianz für Typparameter, die Zuweisungen zwischen Objektmengen mit verwandten Typen ermöglicht.

Visual Basic 10.0 bietet etwas mehr neue Funktionen, insbesondere durch das Nachholen von Features, die C# bereits in Version 3.0 erhielt. In diese Kategorie gehören automatische Properties (ohne expliziten Getter und Setter) und Mengeninitialisierungen. Aus C# 4.0 ist die Co- und Contravarianz enthalten. Außerdem kann der Entwickler nun mit Visual Basic in einigen Fällen Zeilenumbrüche in seinen Code einbauen, ohne die Zeilen mit einem Unterstrich zu verbinden.

Mehr Infos

Marktindikatoren

Zuverlässige Daten darüber, ob mehr C# oder Visual Basic (.NET) eingesetzt wird, gibt es nicht. Gewisse Indikatoren sprechen für C#. Im Gulpometer liegt C# vor Basic und das, obwohl "Basic" hier die .NET-Varianten umfasst. Auf der Fachkonferenz BASTA in diesem Frühjahr hat der Autor des Artikels bei der Keynote gefragt, wer womit programmiert. Von rund 600 Leuten meldeten sich nur etwa 30 bei Visual Basic. Dabei steht "BASTA" für "Basic-Tage". Gut möglich, dass sich viele VB-Entwickler nicht getraut haben, angesichts der zu erwartenden Übermacht von C#.

Die neuen Sprachfunktionen halten sich demnach in Grenzen (verglichen mit den groĂźen Wellen, die es in .NET 2.0 und .NET 3.5 gab). Interessant ist die Aussage von Mads Torgersen, Produktmanager fĂĽr C#, im Dokument "New features in C# 4.0", dass C# und Visual Basic in Zukunft hinsichtlich ihrer Funktionen noch mehr im Gleichschritt gehen sollen als bisher. "Die Sprachen sollen sich in Stil und GefĂĽhl unterscheiden, nicht in ihrem Funktionsumfang".

C# oder Visual Basic? Der Glaubenskrieg ist ĂĽberflĂĽssig, denn es gibt nur eine Antwort: Es ist egal. In der Vergangenheit gab es ein paar Statistiken, die besagten, dass ein C#-Entwickler deutlich mehr bekommt (nicht: verdient) als ein Visual-Basic-Entwickler, weil Ersterer oft vorher aus dem Umfeld von C++ oder Java kommt und dort anspruchsvollere Anwendungen entwickelt hat als die Kollegen, die vorher Visual Basic 5.0 oder 6.0 programmiert haben. Das aktuelle Gulpometer besagt, dass C# mit 64 Euro Stundenlohn fĂĽr einen Freiberufler nur noch einen Vorteil von einem Euro gegenĂĽber Visual Basic hat.

Wenn man nach Entwicklern sucht, ist es nicht wichtig, ob sie C# oder Visual Basic (.NET) können. Nur sollte man niemals jemanden einstellen, der darauf beharrt, nur eine der beiden Sprachen programmieren zu können oder zu wollen. Diese Form der "Beharrlichkeit" ist nämlich ein Zeichen von Inkompetenz.

Dr. Holger Schwichtenberg
bietet mit seinem Unternehmen IT-Visions.de Beratung und Schulungen im .NET-Umfeld. Er hält Vorträge auf Fachkonferenzen und ist Autor zahlreicher Fachbücher.