首先声明,此处仅作语言方面的对比,在 .NET 生产力上,两者没有区别。进行这个对比是为了澄清对 Visual Basic 和 C# 功能错误的认识和流言。以下所有区别都是经过较为深刻的研究得出的,相比一些常见的对比来讲更有科学性
下面先对比 Visual Studio .NET 2003 中,两种语言功能的对比。 * 表示对方语言中没有这项功能,但是可以用别的语法在 IL 级别实现完全同样的功能。注意,本次比较只选择有意义的功能,某些功能,如循环、分支语句等传统功能不在比较之列。同时, VB 因兼容老版本而遗留的,不具有现代语言特征的语法也不在比较之列(如 On Error 语句, Option Explicit 语句等)。
Visual Basic 有而 C# 没有的功能
|
C# 有而 Visual Basic 没有的功能
---|---
局部 static 变量 *
WithEvents 和 Handles 语法 *
可选参数
按名传递
属性参数
按非虚方式访问一个虚函数
换名实现接口
后期绑定
With 语句 *
用 Imports 导入静态成员
模块
Is 操作符 *
Try…Catch When 语句
Visual Basic 运行时库的功能和函数
|
运算符重载
为 event 指定 add 与 remove 访问器
using 语句 *
XML 注释文档
不安全代码和指针
as 操作符
out 修饰符 *
编译器 CLS 检查
接下来,是未来 Visual Studio 2005 中两者功能的对比。在这个对比中,所有因 Visual Studio 2005 新增功能产生的差异,将以粗体字表示。注意,并不是每一项新增功能都能产生两者的差异,比如泛型和 Partial Type 都是两者皆有的新功能。
Visual Basic 有而 C# 没有的功能
|
C# 有而 Visual Basic 没有的功能
---|---
局部 static 变量 *
WithEvents 和 Handles 语法 *
可选参数
按名传递
属性参数
按非虚方式访问一个虚函数
换名实现接口
后期绑定
With 语句 *
用 Imports 导入静态成员
Is 操作符 *
Try…Catch When 语句
Visual Basic 运行时库的功能和函数
** 默认实例 **
** My ** ** 命名空间 **
|
为 event 指定 add 与 remove 访问器
不安全代码和指针
out 修饰符 *
** 迭代器 **
** 匿名方法 **
可见无论什么版本的对比,都是 Visual Basic 的功能比较多。当然,仅凭功能的多少,不能改变个人对语言的喜好,也不大可能成为选择开发工具的依据。但是有一句话给我的印象很深,我在 CSDN 上做调查时,有一个人说他用 C# 的理由是:“我用 C# 是因为 C# 比 VB 功能强,哪怕只是一点点也是强”。即使 VB 比较强,还是会有人这么说。这就说明语言或开发工具的歧视不是功能差异造成的,那真正的原因是什么呢?