VB .NET vs. C#
选择那个会更好一点?
By Craig Utley
By Montaque(当然,我只是做了稍微的注解)
偶尔看到的这片文章,我觉得还是不错的一片文章。作者分析了一下两者相比较都是那个更适合我们,尤其对于那些正在C#和VB.NET之间犹豫的程序员。
With the release of .NET, Microsoft is creating two new languages, Visual Basic .NET and C#. Many developers are wondering which language they should choose, and current Visual Basic developers often say they’re thinking about moving to C#. Does it really matter if you build your applications with VB .NET or C#? How do you choose between the two languages?
Why Do They Exist?
为什么两者共存?
Before diving into their similarities and differences, it helps to understand why both languages exist and how they compare with their predecessors.
I often have the chance to ask people why Visual Basic exists. Microsoft’s co-founder and chairman Bill Gates has a long history with the BASIC language. In fact, his first product was a BASIC interpreter for the Altair computer, written on punch tape. Microsoft’s history with BASIC includes several versions of BASIC before Visual Basic, but Visual Basic was Microsoft’s first real attempt to open Windows programming to the masses.
I have to admit that I scoffed when I first saw Visual Basic 1.0. I knew that real Windows programs were written in C++, not Visual Basic. Fortunately, however, I hadn’t been too brainwashed by the C++ crowd, and, as I learned Visual Basic, I began to see a simple elegance in it. True, version 1.0 didn’t exactly let you write mission-critical applications, but it was very easy to create a quick Windows application.
真正的程序员都是用C++,但是vb却以其简单易用开发程序吸引了我。
As Visual Basic evolved, it became much more powerful. Today, it is the most common way to build business applications on the Windows platform quickly. VB applications can be distributed, scalable, fast, and even mission-critical. Meanwhile, the C++ developers continue to regard VB as a toy language. After all, you can’t really program without pointers (and pointers to pointers), can you?
时至今日,vb可以轻松开发商业、甚至要求苛刻的程序。
While VB has gained a huge, worldwide following, the language (pre .NET) does have some missing elements. I rarely hear VB developers asking for pointers like those in C++, but they do ask for implementation inheritance, multithreading, and the ability to create Windows services and console applications natively. VB .NET answers all these requests and fixes many of the annoying little issues with VB. For example, you can instantiate variables at run time now, and parameter passing defaults to ByVal.
指针很重要吗?我们需要的是继承、多线程。。。
VB .NET is the modernization of VB, having added implementation inheritance and multithreading, but VB .NET has done so not so much through language changes as by supporting the features built into the .NET Framework. The Framework’s Common Language Runtime, or CLR, provides inheritance and multithreading along with support for a variety of projects. VB .NET is one of the first-class languages on the .NET platform, meaning it fully supports the CLR and cannot be considered a second-class citizen to C#.
在.NET这一平台下,vb.net绝对不落后c#
拿为什么会有c#呢?
C# exists for a very different reason. While VB .NET added support for such things as multithreading and inheritance, C++ has had those capabilities for years. However, C++ often is used for plumbing. You don’t typically write device drivers in VB. Instead, you use C++. If you take the concept of building a house, the C++ developers are the ones pouring the foundation, running the wiring, and installing the plumbing. VB developers then step in, put up the drywall, add carpeting, paint and furniture, and make the rooms functional. It’s not that C++ can’t do those things, it’s just that it generally takes longer to do those things in C++. In business, time is money, and time is a luxury many businesses do not have.
还是承认,C++是基础,vb开发应用层。商业上,时间就是金钱;同样开发效率就是金钱。
Microsoft claims C# is the modernization of C++, just as VB .NET is the modernization of VB. While C# does try to eliminate some of the inconsistencies of the C++ language, it is really more about welcoming C++ developers into the world of building business applications quickly. In other words, C# allows C/C++ developers to finish those rooms and make them functional as fast as VB developers have been able to for years.
C#对C++的用户来说,却是一个快速开发的好工具。
C# eliminates many of the areas that make C++ a minefield for developers. Because C# is built on the .NET Framework, it takes advantage of .NET’s automatic memory management. This should eliminate many of the memory leaks often associated with incorrect use of memory in C++. C# also takes advantage of the CLR’s type safety, preventing you from reading memory outside your object’s memory range. And C# eliminates explicit pointers, which were the source of a tremendous number of bugs, especially for novice developers.
Some C++ developers see C# as the “dumbing down” of C++. Instead, it is an attempt to build a type-safe, reliable .NET language with syntax familiar to C++ developers. Similarly, VB .NET is an attempt to build a type-safe, reliable .NET language with syntax familiar to VB developers. The fact that VB .NET seems to gain a host of features is due more to its support of the CLR than to enhancements of the language. Because C++ already supported many of these features, some developers say the move to C# seems like a step backward.
C++用户使用C#是不是一个倒退?
VB .NET or C#: Does It Matter?
选择VB .NET or C#,很重要吗?
ASP classic developers have been debating VBScript vs. JScript on the server for about four years. The syntax of the two was obviously quite different, but, beyond that, the differences were minor. VBScript added a few nice objects, such as the Dictionary, the FileSystemObject, and the TextStream objects. But, overall, the languages let you accomplish the same thing.
The difference between the functionality of VB .NET and C# is even smaller. If you create a new project in Visual Studio .NET, you see the exact same project types listed for each language. So, if the project types are the same, and the functionality differences between the languages are small, does it matter which you choose?
If the answer was no, this would be a short article. The fact is that the language you choose probably won’t hinge on the functionality in the language itself. Instead, your choice will hinge on some other criteria, which we’ll examine in a moment.
看一下细节的东西吧!
What about Speed?
速度的问题呢?
Unfortunately, it’s too early to tell about speed. According to Microsoft, the speed between the two languages will be the same. Much of your code actually will be calling classes in the CLR, so that will be the same regardless of the language used to call it. As for the speed of items such as loops and string concatenation, that will depend on the compiler.
Microsoft officials say VB .NET and C# will compile to the same IL, so the result will be the same speed. I must admit I’m skeptical, but there is no way to test this at this time. With .NET still in beta (.NET was not yet final when this article went to press. - Ed.), any speed tests most likely would bear little resemblance to the final product. For now, assume the speed will be very close, and don’t worry about it until .NET is a finished product.
看来速度还是差不多,播种之间。
What about Language Differences?
The differences in the languages are small, but they do exist. For example, C# allows you to have unsigned integers of various sizes, and VB .NET does not. It is important to note, however, that unsigned integers are not part of the Common Language Specification (CLS), a part of the .NET Framework that defines what language elements can be used to allow inheritance between languages. If cross-language inheritance is something you want to ensure, you need to stick to only CLS-compliant types for any exposed parameters and return values.
小细节:C#拥有无符号整数、VB.NET没有。但是无符号数不符合CLS规范,不利于跨语言继承。还是建议不要用无符号数。
VB .NET adds some of the C/C++ shortcuts, such as +=, -=, and others. Now, in VB .NET, x += 5 is the same as x = x + 5. However, VB .NET does not support the ++ or -- operators, which C/C++ programmers frequently use. C# supports all of these, of course. C# also supports the concept of operator overloading, in which a developer can overload operators such as +, - , and True. Operator overloading is admittedly not something most VB .NET developers will miss, but it is one of the differences between the two languages.
VB.NET增加了一些C++的特性,比如+=,-=.但是C#全面保留了原来C++的这姓特性,比如++ ,――,这些还不是很重要的。VB.NET不具有运算符重载,这倒是两个语言的一个小区别。
I won’t go into the differences in the actual syntax here, except for two items that are only relevant to VB developers thinking of making the switch to C#: case sensitivity and the equality operator. (See Eric Smith’s article There and Back Again for more on syntactical differences and how to move code from one language to another.) Don’t forget that VB and VB .NET are not case sensitive, while C# is. Also, the assignment operator in C# is the equal sign (=) but the equality operator is the double equal sign (==). These two differences are a major headache for VB developers trying to make the switch to C#.
Vb和VB.NET都是大小写不分的,C#是区别的。还有,两者是不是相等,C#还是两个等号。
To see some of the general language differences, check out the sample VB .NET code in FIGURE 1.
两个具体的例子:
Module Module1
Sub Main()
Dim x As Integer = 5
Console.WriteLine("The secret number is: " & x)
End Sub
End Module
FIGURE 1: Sample VB .NET code.
As you can see, VB .NET now allows you to initialize variable values at declaration. The next line uses the WriteLine method of the Console class. There is some simple string concatenation, and the string is printed to the console (or the DOS window or command window).
FIGURE 2 shows the same application written in C#. The variable declaration is cleaner, but the Console.WriteLine is almost identical. Notice the curly braces and semicolons in the C# program, which are familiar to C/C++ and Java developers.
using System;
namespace ConsoleApplication3
{
class Class1
{
static void Main(string[] args)
{
int x=5;
Console.WriteLine("The secret number is: " + x);
}
}
}
FIGURE 2: The same application as in FIGURE 1, but written in C# instead of VB .NET.
One of the differences when working with both languages in Visual Studio .NET is important to point out. When writing VB .NET, you can type “console” and when you press the period, the list of properties and methods appears. If you are typing in C# and you type “console” and press the period, nothing appears. This is because C# is case sensitive, and you’ll have to type “Console” for the IntelliSense to work. VB .NET developers may find this tedious. Whether you consider it lazy or convenient, VB .NET developers typically type everything in lowercase and let the environment case it properly. C# developers have to case it properly as they type. This means C# forces a stricter set of code-writing standards, while VB .NET developers save wear and tear on the shift key.
VB.NET省了很多press SHIFT的机会,不行吗:)
So, how do you choose? If the functionality in the two languages is nearly the same, how do you go about choosing which language you want to use? I’ll break this discussion into three categories: familiarity, resources and support, and personal edification.
Familiarity
The main reason to choose VB .NET or C# is familiarity, which is interesting because both languages are new. I’ve had some people on the Microsoft project team tell me they don’t want the move from VB to VB .NET to sound like a big move. Well, it is a big move. The learning curve is steep. The learning curve from VB to C# is steep. The learning curve from C++ to C# is steep.
You’re learning a new language, but much of it is learning the .NET Framework and all the classes the CLR supplies. If you want to create a new thread, it’s in the run time. If you want to access data using ADO.NET, it’s in the run time. If you want to read in some XML, it’s in the run time. I think you get the picture: Much of what you will be doing is learning the run time.
As you learn the run time, however, you’ll be using some language to play with it. While VB .NET is a new language, and there are differences from VB that will cause you to lose your hair, I think it’s safe to say that the learning curve going from VB to VB .NET is less steep than it is from VB to C#. C++ developers will feel more at home with C# than with VB. If you are a hard-core Java or JScript developer, you also will feel much more at home with C#.
那个更熟悉?一言道破,C++用户到C#以及vb到vb.net是个不错的选择。
VB developers will be much more at ease with VB .NET’s loops, conditional constructs, variable declaration syntax, and more. Why fight case sensitivity and that double-equals sign when you don’t have to? You’ll find yourself searching for a bug for an hour, and it will turn out to be a missing equals sign. You don’t need the headache of learning the nuances of a new language when you are trying to learn the CLR.
C++, Java, and JScript developers are used to case sensitivity, the double-equals, and all those curly braces. Moving to the more wordy VB .NET syntax would probably just be frustrating at a time when the developer should be focused on learning the CLR classes and not having to worry about an unfamiliar syntax.
Recommendation No. 1: Go with what’s closest to you. If you are a new developer and have never written a line of code in your life, you’ll have to find your answer in the next two sections.
总结一下吧,选择最亲切的一种语言吧。如果呢是一个新手,还是看看后面的分析吧:)
Resources and Support
参考资源的盈亏
If you are learning a new language, what’s the first thing you do? For most people, the first step is to create a Hello World program from a book or a help file. Some people actually read the language reference then. (Really, I’ve seen people do it!) Most people go through online tutorials, maybe buy a book or two, and then look at the language reference only when they are stuck.
There will be no shortage of books, Web sites, and articles on either VB .NET or C#. So you should have plenty of opportunities to read about either language and have a number of examples from each language.
However, there are other factors to consider. Do you know anyone with experience in either one? Someone you can bounce ideas off of when you are having problems? What about industry support? Microsoft created both languages, but how many VB .NET developers will there be, compared with C# developers? Will Microsoft favor one over another in example code? Will your area offer training in both VB .NET and C#?
Most resources should be widely available in each language, but, if VB is any guide, there will be more VB .NET developers than there will be C# developers. While I expect the gap between the number of VB .NET and C# developers to be smaller than the gap between VB and C++ developers, there will likely be more VB .NET developers because so many VB developers will use VB .NET when they make the leap to .NET.
说了这么多,好像再说.NET开发者更多,当然可以请教的高手也多。
Personal Edification
个人领悟
Perhaps you’ve always wanted to program in C++ but found it too obscure, difficult, or overwhelming. Now, you see that C# exists but removes some of the more intensive tasks, such as managing memory and handling pointers. If it’s been a lifelong dream of yours to program in C or C++, feel free to take C# for a spin. You’ll find it quite forgiving and very powerful for creating business applications.
If you’re thinking, “Aha! Now I can learn C# and pull down the big bucks!” then I need to warn you about something. You see, it’s true in most cases today that C++ developers earn more than do VB developers. One reason is that there are a lot fewer C++ developers. Another reason, though, is the kind of work that C++ developers are doing. They are typically doing things you can’t do (at least not reasonably) in VB. They’re writing device drivers, socket interfaces, or any manner of low-level applications. VB developers, on the other hand, are busy solving business problems.
C# is not going to be used for the same purposes as C++. Instead, C# will be used for business applications. Therefore, C# and VB .NET will be used to create exactly the same kinds of applications. The advantage of one over the other will be miniscule when creating business applications. The only way you might earn more as a C# developer is that there likely will be fewer of them, so you may get lucky that way. It’s unlikely, however, that you’ll be building low-level applications. So, unless the manager is a dolt, you won’t be worth more than a VB .NET developer.
Finally, pick the language you like. A friend tells me he has always thought C/C++ looked more elegant and logical to him than VB, but he’s been using VB for a few years. He plans on making the jump to C# because “it looks better.” That’s not a bad reason, but he’ll be learning the CLR and C# at the same time. As a VB developer, he’d probably have an easier time learning the CLR and VB .NET at the same time and then making the move to C#.
说了这么多,还是个有千秋。
Conclusion
From a purely technical standpoint, which language you choose is probably irrelevant. Yes, there are some differences in the functionality between VB .NET and C#, but they’re small. The main issue to consider is your comfort level with the languages on which these new languages are based: If you are familiar with VB, you’ll have an easier (though not necessarily easy) transition to VB .NET. If you are a C, C++, Java, or JScript developer, you likely will find C# more comfortable.
Despite the two languages being different, they almost always will be used to produce the same sort of applications. Therefore, any salary difference between VB .NET and C# developers would be based on the sheer numbers of developers, and not on any specialized requirements of C# developers that VB .NET developers can’t handle.
Most of you will use what your company tells you to use. If the choice is yours, feel free to choose either one. There’s nothing wrong with learning both, but you should probably move to the one closest to your current language first, so you can learn the run time without having to fight the language too much. Then, any .NET language will just require you to learn some new syntax.
这个作者还是建议本来VB接触比较多的,转移向VB.NET;如果你是个C/C++ 、Java 、JScript高手的话,建议还是采用C#。
Montaque==Hou Yongfeng==Digitalboy