Re: GUI Development
If you're comfortable writing in VB, you'll be happy with C#. Designing a GUI in C# has the look and feel of VB. Any VB programmer can have a C# GUI running in 5 minutes.
Everyone defends the language they use for the most part. Others are emotional or cavalier about giving advice - like it's hacked together or volatile. If you're truly selecting the language based on development time and your programming team knows C/C++ then C# is the hands-down winner.
Aside from easy GUI design, C# has many cool things built in, from the usual stuff like dialogs for files, directory searching, file watching, printing, colors, fonts, etc. It also has easy and automatic data grids, menus, tool bars/tips, process (for spawning other apps), calendar, easy to use tabs, easy threads, etc. And that's just the default tool box. There is another group of features, from .NET and COM that offer all kinds of services from TAPI (telephone API), SAPI (Speech API - speaks from text with 2 lines of code), Flash (drop your flash movie onto your GUI!), and many, many more.
Some other considerations:
C# Express is currently free and so is .NET.
Much shorter learning curve if you know C or C++
There are many C# - specific tutorials on the web for anything you want to do, I never use help (F1) anymore.
Probably better for your resume that Java or some of the other ones. (How many jobs do you see for Eiffel, for example compared to C#?).
C# has managed memory a little like VB so, for the most part you don't have to worry about crashing with an errant pointer like in C/C++.
C# lets you use unmanaged code (like a C++ component) if needed.
I think the stability of C# is no worse than any other language, it just has higher visibility and emotional responses. Since it is widely used, bugs and work-arounds are generally well-known. I have yet to see a high-level language that doesn't have some major problem that takes an inordinate amount of time to find or work around.
As far as .NET being slower?
"Ask anyone the question above and they will say that managed is slower than unmanaged code. Are they right? No they are not. The problem is that when most people think of .NET they think of other frameworks with a runtime, like Java or Visual Basic; or they may even think about interpreters. They do not think about applications, or what they do; they do not think about limiting factors like network or disk access; in short, they do not think. "
".NET is not like those frameworks. It has been well though out and Microsoft has put a lot of effort in making it work well. In this article I will present some code that performs some computationally intensive operation and I will compile it as both managed C++ and unmanaged C++. Then I will measure how each of these libraries perform. As you will see, .NET is not automatically much slower than unmanaged code, indeed, in some cases it is much faster."
"There is nothing in .NET that means that it should automatically be much slower than native code, indeed, as these results have shown there are cases when managed code is quicker than unmanaged code. Anyone who tells you that .NET should be slower has not thought through the issues." from: h**p://www.grimes.demon.co.uk/dotnet/man_unman.htm
The baggage that comes with C# is that you must have the .NET framework installed. I know that many are instantly offended and turned off by this and by MS too, but it's best to just look at the facts. First, Windows XP automatically installs .NET and it's easy to upgrade if you need to. If you're writing shrink-wrap software for example, Visual Studio will generate the entire installation setup for you (called Publish). If you're writing for inhouse or deliverable hardware then you don't need to worry about installation so much.
I just finished a major project in C# and it was fun and fast. I will resist going back to VC++ or VB again.