VB.NET vs C# the redux

Introduction

A while ago there was quite the discussion about what the differences where between VB.NET and C# and what people should use.

After a while it seems that most things where said and it became clear that the C# camp had the most zealous advocates.

Now things have quieted down a lot and it would seem that most people have made their choice and perhaps even changed it in between.

At the time that I wrote my previous post about the subject the statistics where telling us that the usage was about equally divided between VB.NET and C#.

The state today

Today there is a different picture, most of the highly visible people who where actively supporting the VB.NET language have switched to C#.

That probably means that the usage of VB.NET has now dropped a great deal compared to C#.

Looking at job postings etc. it would also seem that C# has won the race.
Which is something which probably isn’t that surprising.

A poll by Telerik shows: 69% C# vs 30% VB.NET.
Last year it was: 63% to 34%.

Why did C# win the race

  1. VB.NET got a bad name by being associated with VB6 and it’s predecessors, which most wouldn’t really consider a respectable language.
  2. C# Has a good name because of the fact that it’s modeled by Andreas Helberg the creator of amongst others the Delphi language.
  3. C# has been modeled after more respectable look a like languages: Java / C / C++, which are all languages which are well respected.
  4. Because of the points above there are more job openings for C#.
  5. It seems like a lot less typing to get the same thing done.
  6. More and more projects are done in C# in comparison to VB.NET.
  7. C# pays more money.
  8. People migrating from VB6 sometimes choose C# instead of VB.NET because of a lot of the above reasons.
  9. Almost no people who migrate from Java / C++ are considering VB.NET as a language.

What is happening now

Things are getting worse for VB.NET.
My favorite .NET books (ASP.NET Unleashed) have gone from VB.NET to VB.NET + C# to C# only.

People who use to be prolific VB.NET programmers are also migrating.

What are the current differences in the languages

Taken from wikipedia:

Features of Visual Basic .NET not found in C#
  • Variables can be declared using the WithEvents construct. This construct is available so that a programmer may select an object from the Class Name drop down list and then select a method from the Declarations drop down list to have the Method signature automatically inserted
  • Auto-wireup of events, VB.NET has the Handles syntax for events
  • Support for optional variables (this will also be available in C# beginning in version 4.0). This is typically used to provide easy interoperability with native code
  • Marshalling an object for multiple actions using an unqualified dot reference. This is done using the With ... End With structure
  • IsNumeric evaluates whether a string can be cast into a numeric value (the equivalent for C# requires using int.TryParse)
  • XML Literals
  • Inline date declarations by using #1/1/2000# syntax.

Features of C# not found in Visual Basic .NET
  • Allows blocks of unsafe code (like C++/CLI) via the unsafe keyword
  • Partial Interfaces
  • Iterators and the yield keyword
  • Multi-line comments (note that the Visual Studio IDE supports multi-line commenting for Visual Basic .NET)
  • Static classes (Classes which cannot contain any non-static members, although VB’s Modules are essentially sealed static classes with additional semantics)
  • Can use checked and unchecked contexts for fine-grained control of overflow/underflow checking
  • Auto-Implemented Properties (as of C# 3.0[4])
  • Implicitly Typed Arrays

Other characteristics of Visual Basic .NET not applicable to C#
  • Conversion of Boolean value True to Integer may yield -1 or 1 depending on the conversion used
  • Assigning and comparing variables uses the same token, =. Whereas C# has separate tokens, == for comparison and = to assign a value.
  • VB.NET is case-insensitive.
  • Type checking is less strict by default. If the default is left in place, It will auto convert type without notifying programmer, for example:
        Dim i As Integer = 1
        Dim j As String = "1"
        If i = j Then
            MessageBox.Show("Bad comparison")
        End If

It should be noted that changing this default (known as ‘Option Strict’) is widely considered best practice for VB development.

Other characteristics of C# not applicable to Visual Basic .NET
  • By default, numeric operations are not checked. This results in slightly faster code, at the risk that numeric overflows will not be detected. However, the programmer can place arithmetic operations into a checked context to activate overflow checking.
  • Addition and string concatenation use the same token, +. Whereas Visual Basic .NET has separate tokens, + for addition, and & for concatenation.
  • In Visual Basic .NET property methods may take parameters
  • C# is case-sensitive.
  • C# does not allow optional parameters (this will be available in C# beginning in version 4.0[2]).

Conclusion

The fight is over and C# won, not that VB.NET isn’t a valid option.
As you can see from my list I think that technical superiority isn’t the reason that C# is winning the race.
It still has my vote for a lot of things. But I don’t expect to be programming in VB.NET a lot in coming jobs.

One thought on “VB.NET vs C# the redux”

  1. During these few years (2006-2009), I had seen some companies migrated their VB.NET 1.0/1.1 to C# 2.0/3.0/3.5 due to technical & non-technical reasons.
    I don’t know & never think that any company is switching from C# to VB.NET.
    Whether the war is over or not, it is too late for VB.NET to catch up.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>