You're an experienced Visual Basic programmer. You're
considering migrating to Visual Basic .NET. Or should you switch to C#? Here's a good place to start, to get your head screwed on straight.
If all your programming experience has been in VB, VBA, or
VBScript, you may feel as though Microsoft left you behind with
Visual Studio .NET. In some ways, you're right. Microsoft made a
lot of changes to the VB language, to make it work with the .NET
Framework. They did this for a very good reason. Rather than trying
to hammer all the cool, new things in .NET into the existing VB
model, Microsoft rewrote many aspects of the language to make it
more modernized. To use a Microsoft phrase, "We wanted to make
VB.NET a first class language," which is what—at least in my
opinion—they did.
However, they had to change the way some things worked within
the language. Much of the core syntax is still there, but the
different way objects and errors are handled can confuse many
VB-only developers.
For something more detailed but light-weight (if that's really
possible), there's a really great book published by O'Reilly called
C# & VB.NET Conversion Pocket Reference. This $14.95
(SRP) pocket reference book has 139 pages of incredibly useful
information on the difference between C# and VB.NET. It'll show how
you would code the same task in both languages, with a brief
explanation of each code block, pointing out "gotchas" to look out
for, how the object-orientation programming models differ between
the languages, and identifying unique features that are in one
language but missing in the other.
Upgrading Your VB6 App to .NET
After the first release of Visual Studio .NET 2002, Microsoft
was flooded with complaints and comments from the VB community that
the transition from VB to VB.NET was difficult, despite what
Microsoft's user acceptance testing showed.
In response, they created a VB6 add-in that will scan your VB
project's source code and make suggestions on the best coding
practices to make your transition to VB.NET easier. It's based on
the VB Project upgrade wizard that comes with Visual Studio
.NET.
If you haven't used the project upgrade wizard before, you're not missing much. What it does is try to convert all known VB syntax to VB.NET syntax where it possibly can. That includes things
like converting Variant data types to Object data types, Integer
data types to Int data types, attempting to switch any intrinsic
controls with .NET intrinsic controls, and so on. What its
not going to do is ensure your VB6 code will work with
VB.NET. The wizard can't correct a lot of things, so it makes
recommendations in the form of "To Do's" and "UPGRADE_WARNING" messages.
How do you run the wizard? From within Visual Studio .NET IDE,
just open up a VB6 project and the wizard will fire up. Voila! It's
just that simple. Some really simple projects convert just fine.
However, watch out for the dreaded "Microsoft.VisualBasic.Compatibility" and
"Microsoft.VisualBasic.Compatibility.Data" namespaces (or references) it may insert into your newly converted project. These libraries allow you to make VB6 method calls that were taken out of
the VB.NET language. This is Microsoft's way to ensure some compatibility with legacy VB code.
Just like when it came time to upgrade Windows 16-bit application to be a 32-bit application, Microsoft tried to make it easy by offering a thunking layer that allowed developers to make
16-bit system calls from within their 32-bit environment. These compatibility references offer something similar. However, rather than clogging up your code with a mix between VB and VB.NET, you
should ask yourself if you really need to upgrade the application to .NET.
If you answer "yes," then you'd better start doing some system
planning and application rearchitecting. Don't just convert your
application and building on whatever foundation you're currently
on. You're better off reevaluating your application to work with
the features that .NET has to offer.
You might have heard that all programs generated in .NET execute the Common Language Runtime (CLR). Prior to .NET, all programs would run against their own runtime library. C++ used MSVCRTxx.DLLs, and VB used the MSVBVM60.DLL. Now, all .NET orograms, regardless of which language they were written in, use the .NET Framework's CLR as it source library to execute against.
When going from VB to .NET, probably the biggest change you have
to make is thinking in an object-oriented manner. You can't code in
VB.NET or C# without thinking this way. You have to think about
things like constructors/destructors, inheritance, overloading,
polymorphism, and so on.
Figure 1.
If you find yourself struggling with some of the differences
between how things were done in VB6 and how it's suppose to be in
VB.NET, the IDE has a tool called "Upgrade Visual Basic 6 Code"
found under the Tools menu. What you do is enter in a VB6 code
snippet and it will do its best to translate it to VB.NET syntax.
You can also select COM objects (see Figure 1) and it
will create the necessary entries in your applications reference
section (see Figure 2).
Figure 2.
Unfortunately, this tool cannot be found in Visual Studio .NET
2002. Microsoft included it in Visual Studio .NET 2003, and it only
works with VB6 code to VB.NET. Remember, not all the VB code you
enter in will translate into VB.NET code. The following example is
a simple procedure to a lot of VBers used to center a form when it
loads:
If you're trying to go from VB6 to C#, you're going to have to find that information elsewhere. Luckily, a number of savvy Web sites offer help in this area. Some offer free code translator
online and some offer version that can be used offline. These are just a few:
KamalPatel.NET: A
Microsoft MVP who has an online and offline C# to VB.NET
converter
Ellkay.Com: A software
development group in NJ (that Kamal Patel works at) that has an
online VB.NET to C# converter
If you perform an Internet search using engines like Google or Yahoo, just enter "vb to c#"and you'll be amazed on how many tutorials and conversion tools there are to assist you.
What's Best for You?
There are a number of debates in the Microsoft developer community as what is the right language to migrate to: VB.NET, C#, or a mixture? The reality is, both are viable languages, and the decision really depends on your organizational needs. If your background is VB, then jumping into VB.NET will take some getting used to, but the you will find it a much richer environment to develop applications.
Going from VB to C# is a bit more tricky. C# is more like C++ and Java, in that you use brackets and semicolons, and the code is case sensitive. However, despite what Microsoft wants you to think, C# offers you more features like pointers, shift operators, inline documentation, and overloaded operators. Also, similar to C++, creating custom controls in C# is easier to do than in VB.NET.
I've personally have written the same application in both VB.NET and C#. When I've done so, I found that some C# features made the programming experience much easier than trying to figure out how to force VB.NET to try to do the same thing. VB.NET is still one of the best tools for rapid application development; C# isn't that far behind. My expectation is that, probably by the next release of Visual Studio .NET, they will be neck and neck.