代码之家  ›  专栏  ›  技术社区  ›  Robin Rodricks

C在vb上的边[闭合]

  •  11
  • Robin Rodricks  · 技术社区  · 16 年前

    C.NET中的内容使其更适合 对于vb.net以外的一些项目?

    性能?能力?,库/组件?名声?可靠性?可维护性?轻松吗?


    基本上什么都可以 C可以做到,使用VB是不可能的, 反之亦然。 只是你的东西 必须考虑 为项目选择c/vb时。

    19 回复  |  直到 7 年前
        1
  •  33
  •   simone.tino    7 年前

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

    1. C可以调用不安全代码
    2. vb有可选参数(在c 4.0中提供)
    3. 当打延迟绑定的电话时(在C 4.0中),vb更容易使用。这个和数字使得2使用vb进行办公自动化变得更干净。
    4. vb有许多类似于my名称空间的“helper”函数和类;但是,所有这些都可以被c访问。#
    5. vb不区分大小写

    C的语法遵循类似于C和Java的语法,这使得它从那些语言过渡得更加舒适,因为VB可以让VB用户更舒服。至于性能,以及库或组件,它们几乎是相同的。

    至于选择哪一种语言,除非你需要做不安全的操作,那么选择你最自然的语言。在成为一名VB开发人员多年后,我喜欢不必写如果Yadada那么……如果(Yadaya)……结束如果(Yadaya)保存我的腕管一些额外的按键(然后可以用来回答这样的问题)

    编辑

    刚刚了解到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。所以下面是等价的陈述

    C.* if (foo is FooObject){}

    VB If TypeOf foo is FooObject then

    1. 同样,正如评论中提到的,我希望我能看到他们给你学分,但C没有类似的参数。您需要使用regex类。
        2
  •  21
  •   splattne    16 年前

    我认为Kathleen Dollard的这篇博客文章对这个问题提供了一个极好的概述:

    What a C# Coder Should Know Before They Write VB

    她的第一个建议是:

    1)克服尊重或辞职 在你开始之前。VB是一个伟大的 语言。

        3
  •  15
  •   CtrlDot    16 年前

    极客之间的街头信誉。

    (不要假装这不重要!)

        4
  •  11
  •   Jon Skeet    16 年前

    其他人已经涵盖了很多不同之处——正如已经说过的好几次,他们 几乎 等效语言。据我所见,还未涵盖的一些差异:

    VB9具有:

    • XML文字
    • 可变匿名类型(URGH)
    • 更多LINQ支持 语言 (C仅涵盖少数运营商)
    • 语言中的一大堆额外的位被编译成调用microsoft.visualBasic程序集。(C更喜欢成为一种小型语言,其背后有.NET框架的重量。)
    • 日期时间文本

    C 3有:

    • 更好地支持lambda表达式:IIRC,在VB中不能用块体编写lambda表达式。
    • 迭代器块。
    • 扩展方法的语法(而不是用属性修饰方法)

    我怀疑还有更多的,但我想我只是把它们混在一起。

        5
  •  9
  •   Mike Scott    16 年前

    当你遇到一个问题时,你通常可以通过谷歌搜索一个代码示例,它显示了如何在几分钟内解决问题。这是提高生产力的一个重要因素。当我使用Delphi时,我必须将C中的代码样本转换为Pascal-Doable对象,但是很冗长,也就是说有很多摩擦。所以不要低估这样一个事实…

    绝大多数.NET代码示例都是C!

        6
  •  5
  •   community wiki Mehrdad Afshari    16 年前

    在vb.net的早期版本中,差异更为明显,但与当前版本相比,没有显著差异。

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

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

        7
  •  4
  •   Jon Skeet    16 年前

    vb.net有一个根命名空间,c有一个不同的默认命名空间。因为当你在vb.net中有一个根名称空间时,它总是将它添加到名称空间之前。

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

    Namespace namespace1
      Public Class class1
      End Class
    End Namespace
    

    然后您必须将其称为namespace1.namespace1.class1

    在C中,如果您的文件中有一个名为namespace1的默认命名空间。

    namespace namespace1{
      public class class1{}
    }
    

    然后您仍然可以将其称为namespace1.class1

        8
  •  3
  •   Daniel Plaisted    16 年前

    我最喜欢的C的特性是vb没有的yield语句。它允许您轻松地从方法返回经过惰性计算的IEnumerable。

    这里有一篇文章介绍了它: http://msdn.microsoft.com/en-us/magazine/cc163970.aspx

        9
  •  3
  •   chrissie1    16 年前

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

        10
  •  3
  •   nick_alot    16 年前

    我看到C的最大优势是绝大多数开源项目、示例代码和博客片段都是用C编写的。虽然用工具(或你的脑袋)很容易将它们转换为vb.net,但对于vb开发人员(像我一样),这仍然是一项单调的任务。

    即使你每天都在用vb.net写,你仍然需要能够读C。#

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

    大多数优秀的开发人员应该能够在几天的调整时间内在两者之间切换。

    我的核心节俭在于我写了数百篇文章:

    String lastName as String
    

    想知道为什么它从不编译!

        11
  •  2
  •   GvS    16 年前

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

    还有很多关于C的代码示例。

    在vb.net中,使用后期绑定要容易得多。例如COM对象(在4.0版的C_中)。

    • 我在我的项目中90%使用C
    • 我使用vb.net进行Interop到Excel等操作

    一旦我对f有了更好的了解,我可能会将其用于f更适合的零件。

        12
  •  2
  •   Konrad Rudolph    16 年前

    性能?

    没有区别,尽管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还不能做到这一点,而且在这个地方的评论是被禁止的,这只是更混乱,通常是一个不可行的。

    库/组件?

    相同的。

    声誉?

    不重要。__Street Cred__?对不起的。不是一个因素。过来,尼克。

    可靠性? 可维护性? 安逸?

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

        13
  •  1
  •   CodeAndCats    16 年前

    据我所知,语言之间存在差异,尽管它们是最小的。我建议使用您/您的开发人员认为最适合的语言。如果他们已经有了vb的经验,那么我建议vb.net/反之亦然。

    尽管我个人更喜欢C的简洁语法。:)

        14
  •  1
  •   James Curran    16 年前

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

    这基本上让我们看到,C看起来很像Java和C++,这给了它更多的可信度。

        15
  •  1
  •   Arjan Einbu    16 年前

    我认为乔希对语言差异做了很好的总结。

    工装支架

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

    VB编辑器通过始终不显示所有选项来简化IntelliSense。

    我相信还有更多的事情,但这些是我作为一个C er(做很少的vb)已经注意到的。

        16
  •  1
  •   nick_alot    16 年前

    这是另一个尚未在这条线索中涉及的问题:

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

    然而,我不同意这一观点:

    有更多的c dev商店,vb商店

    如果你使用VB的能力更强,一些落后的C雇主会让你处于严重的劣势。所以也许C是更好的选择。

    另一方面,当你为你的“C”项目雇佣员工时,你将能够吸引更多的应聘者到ITerview并获得更好的技能,因此“我认为细节不应该被忽视”。

        17
  •  1
  •   greg    16 年前

    我不得不说,在使用谷歌搜索示例或文档时,我的经验是,C示例比VB示例质量更好。这并不是说没有坏的C例子,但是如果你搜索类似“字典下拉”的东西,添加C会在列表中提供更高质量的答案。

    这不适用于并排显示C和VB代码的示例。

        18
  •  0
  •   chrissie1    16 年前

    目前,vb.net对lambda表达式的实现非常差。也就是说,你不能像C那样做那些整洁的事情。嗯,你可以,但在大多数情况下,它需要一个非常丑陋的解决方案。

    这是在vb.net 10.0中解决的。

        19
  •  0
  •   Community CDub    8 年前

    没有旧的cruft,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