C#优于VB

时间:2008-12-19 07:12:57

标签: c# .net vb.net

对于某些项目而言,C#.NET中哪些项目比VB.NET更适合

性能?,功能?,库/组件?,声誉?,可靠性?可维护性?,轻松?


基本上任何 C#都可以做到,这是不可能的,使用VB,,反之亦然。 在为项目选择C#/ VB时,您必须考虑的事项

19 个答案:

答案 0 :(得分:33)

C#和VB基本相同,但存在一些细微差别。除了明显的语法差异外,您还有以下不同之处:

  1. C#可以调用不安全的代码
  2. VB具有可选参数(即将推出C#4.0)
  3. VB在进行后期绑定调用时更容易使用(来自C#4.0)这个和数字make 2使用VB来使办公自动化更加清洁。
  4. VB有一堆“helper”函数和类,比如My namespace;但是,C#
  5. 都可以访问所有这些内容
  6. VB不区分大小写
  7. C#的语法遵循与c和java类似的语法,这使得从这些语言转换起来更加舒适,因为VB对VB用户来说更舒服。到目前为止,性能,库或组件几乎完全相同。

    至于选择哪一个,除非你需要做不安全的操作,然后选择最自然的语言。经过多年的VB开发人员,我喜欢不必写作如果yadada然后.....结束如果(yadaya){....}保存我的腕管一些额外的击键(然后可以用来回答SO题)

    修改

    刚刚学到了另外一个区别btw C#和VB是VB支持过滤异常所以你可能会像这样伪:

    try
    {
       //do something that fails
    }
    catch(Exception ex when ArgumentException, 
          ArgumentNullException, FormatException)
    {
      //Only handle these three types
    }
    

    这不应该与能力相混淆:

    try
    { 
        //something that fails
    }
    catch(ArgumentException)
    { 
        //Log Error
    }
    catch(ArgumentNullException)
    {
        //Log Error
    }
    

    在这种情况下,您将在VB世界中以不同方式处理异常,您可以定义一段代码来处理多种类型的异常。

    修改

    更多的差异。

    1. VB的Is运算符比较两个对象以确定它们是否相同,它编译为CEQ IL指令,其中C#编译为isinst IL。所以以下是等效陈述
    2. C# if (foo is FooObject){}

      VB If TypeOf foo is FooObject then

      1. 同样如评论中所述,我希望我能看到它们给你信任,但C#没有类似的参数。您需要使用RegEx类。

答案 1 :(得分:21)

我认为Kathleen Dollard的这篇博文提供了一个很好的概述:

What a C# Coder Should Know Before They Write VB

她的第一个建议是:

  

1)克服尊重或退出   在你开始之前。 VB很棒   语言。

答案 2 :(得分:15)

极客之间的街头信誉。

(并且不要假装这不重要!)

答案 3 :(得分:11)

其他人已经涵盖了很多差异 - 正如已经多次说过的那样,他们几乎是等同语言。到目前为止我还没有看到一些差异:

VB9有:

  • XML文字
  • 可变匿名类型(urgh)
  • 语言中的更多LINQ支持(C#仅涵盖少数运营商)
  • 语言中的一大堆额外位被编译为调用Microsoft.VisualBasic程序集。 (C#更喜欢使用.NET框架重量的小语言。)
  • DateTime文字

C#3有:

  • 更好地支持lambda表达式:IIRC,你不能在VB中用块体写一个lambda表达式。
  • Iterator blocks。
  • 扩展方法的语法(而不是使用属性修饰方法)

我怀疑还有更多,但我想我会把它们扔进混合物中。

答案 4 :(得分:9)

当您遇到问题时,您通常可以通过Google获取代码示例,该示例显示如何在几分钟内解决问题。这是提高生产率的重要因素。当我使用Delphi时,我不得不将代码样本从C转换为Object Pascal - 可行,但是很乏味,即很多摩擦。所以不要低估这个事实......

绝大多数.Net代码示例都在C#中!

答案 5 :(得分:5)

在早期版本的VB.NET中,差异更明显,但是对于当前版本,没有显着差异。

VB直接在代码中支持XML文字,C#不支持。 C#支持不安全的代码而VB则不支持。从技术上讲,这两者是最大的差异。有许多小的变化,但它们并不重要。我更喜欢C#,因为我认为语法不那么臃肿。很容易识别代码块而不是看到一堆关键字,但这是一种纯粹的个人偏好。

选择您和您的团队更熟悉的那个。

答案 6 :(得分:4)

VB.Net有一个根命名空间,C#有一个默认的命名空间,它不相同。因为当你在VB.Net中有一个根命名空间时,它总会在命名空间之前添加它。

例如:如果您在VB.Net中有一个名为namespace1的rootnamepsace,然后将其添加到您的文件中。

Namespace namespace1
  Public Class class1
  End Class
End Namespace

然后你必须将它称为namespace1.namespace1.class1

如果你有一个名为namespace1的默认命名空间,那么在C#中

就可以在你的文件中使用它了。

namespace namespace1{
  public class class1{}
}

然后你仍然可以将它称为namespace1.class1

答案 7 :(得分:3)

VB对错误有更好的反馈。在C#中,您必须更频繁地编译以获取语法中的所有错误。

答案 8 :(得分:3)

我在C#中看到的最大优势是绝大多数开源项目,示例代码和博客片段都是用C#编写的。虽然使用工具(或者你的头)很容易将它们转换为VB.NET,但对于VB开发者来说(对我来说)仍然是单调的任务。

即使您每天都在VB.NET中编写,您仍然需要能够阅读C#

从技术上讲,它们共享具有相同性能和内存特性以及相同类型系统的相同框架,因此我发现很难将这两者分开。

大多数优秀的开发者应该能够在两天之间调整,调整时间为几天。

我的核心挫折在于我写下的数百个时间:

String lastName as String

并想知道为什么它永远不会编译!

答案 9 :(得分:3)

我最喜欢的C#,VB没有的是yield语句。它允许您从方法中轻松返回延迟评估的IEnumerable。

以下是一篇涵盖它的文章:http://msdn.microsoft.com/en-us/magazine/cc163970.aspx

答案 10 :(得分:2)

在C#中,您可以对事件/代理进行更精细的控制。但你很少需要这个。

C#还有很多代码示例。

在VB.Net中,(很多)使用后期绑定更容易。例如,COM对象(在4.0版本的C#中)。

  • 我在项目中使用C#90%
  • 我使用VB.Net进行Excel等的互操作

一旦我更了解F#,我可能会将它用于F#更适合的部件。

答案 11 :(得分:2)

  

性能?

没有区别,虽然VB历史上在循环中使用了一个奇怪的索引,这意味着你必须在大多数时间从最高索引中减去1:

For i = 0 To someArrayOrString.Length - 1 …

虽然我怀疑这会以任何可衡量的方式影响效果。

另一方面,由于后台编译,VB实际上编译似乎更快。有些人声称这会让IDE反应缓慢,但我从未注意到自己。

  

功能

在少数情况下,C#的yield语句非常有用。 VB需要更多的手动工作。此外,lambda在C#中实现得更好,特别是在语法上。请考虑以下两个陈述:

Parallel.For(1, 10000, i => {
    // Do something
});

Parallel.For(1, 10000, Sub() _
    ' Do something '
End Sub)

除了VB还不能做到这一点,而且禁止在这个地方发表评论,它更加混乱,而且通常都是禁止的。

  

库/元件

相同。

  

声望?

不重要。 “街头威望”?抱歉。不是一个因素。克服它,尼克。

  

可靠性?   可维护性?   缓解?

或多或少相同。我声称VB更容易,但可能有偏见,无论如何,它只是边缘化。

答案 12 :(得分:1)

我认为Josh对语言差异进行了很好的汇总。

工具支持

但Visual Studio处理这些语言的方式也存在差异。 代码片段更容易在C#编辑器中使用,重构也更好。

VB编辑器通过不显示所有选项来简化智能感知。

我确信还有更多的东西,但那些我作为C#呃(做很少的VB)注意到的东西。

答案 13 :(得分:1)

由于C#和VB.Net都编译成MSIL,因此两者的性能,功能,库和组件几乎相同。反射可以将MSIL代码解压缩为C#或VB.NET(或许多其他语言)

这基本上离开了我们,C#看起来很像Java和C ++,这使它更具可信度。

答案 14 :(得分:1)

据我了解,语言之间存在差异,尽管它们很少。我建议您使用您/您的开发人员最满意的语言。如果他们已经有VB经验,那么我建议VB.Net/vice-versa。

虽然我更喜欢C#的简洁语法。 :)

答案 15 :(得分:1)

以下是此追踪尚未涵盖的另一点:

更高的就业能力+更好(更多)开发资源

现在我不同意这种观点:

VB商店有更多的C#开发商店

如果你对VB更强,那么一些落后的c#雇主会让你处于严重的劣势。所以也许C#是更好的选择。

另一方面,当您为C#项目雇佣人员时,您将能够吸引更多候选人参与iterview并获得更好的技能 - 我不认为细节应该被忽视。

答案 16 :(得分:1)

我不得不说,在使用Google搜索示例或文档时,我的经验是C#示例质量比VB示例更好。这并不是说没有糟糕的C#示例,但如果你搜索类似“字典下拉”的内容,添加C#将在列表中提供更高质量的答案。

这不适用于同时显示C#和VB代码的示例。

答案 17 :(得分:0)

目前VB.Net的lambda表达式实现很差。这意味着你无法在C#中做到整洁的事情。嗯,你可以,但在大多数情况下需要一个非常难看的解决方法。

这在VB.Net 10.0中得到了解决。

答案 18 :(得分:0)

免于旧版本,C#中的数组声明不会使用额外元素填充。 VB.NET数组填充了额外的元素,因此传统的VB6代码迁移更容易。

C#比VB.NET更加一致

Button1.Color() = Color.Red
Button1.Color = Color.Red

当一个学生问我何时在VB.NET的属性上使用括号时,我无法给出答案。很难为这种错误提供有见地的推理。

与实例和静态成员的一致性。 VB.NET允许访问实例上的静态成员,例如yarn.Sleep(1000),这是一种错误。 https://stackoverflow.com/questions/312419/language-features-you-should-never-use