VB.Net与C#辩论[关闭]


18

我去过的工作场所在项目开始时就提出了“我们应该使用VB.Net还是C#”的问题。

诚然,与.Net早期相比,现在做出决定的可能性可能不大。特别是考虑到语言融合的趋势,但这仍然是一场激烈的辩论。

那么,在VB.Net和C#之间,您首选哪种语言,为什么呢?


2
只是为了在工程中投入一把,有些产品(例如VS2010中的WF设计器)支持VB.Net语法...
Damovisa 2010年

在这里,C#程序员的薪水比VB.NET程序员高。
SeanX 2010年

我删除了标题的“永恒”部分,该部分似乎实际上是“无建设性的”。问题本身非常有用,答案的质量更好地表明了臭名昭著的“六项准则”的建设性。
Wizard79 2010年

我经常想知道,如果继续保持C#的趋势,使具有VB.NET的人员体验更加稀缺并能够获得更高的报酬,这种趋势是否会扭转?
JohnFx 2011年

Answers:


29

与VB.NET相比,我更喜欢C#,因为

  • 查找程序员/职位比较容易:

替代文字

  • 查找帮助更容易:

替代文字

(来自stackoverflow)


3
+1 SO正在迅速取代Google,成为我首选的编程帮助来源。
匿名类型

12
问题是C#标签增加10倍是否意味着主题可以更好地覆盖,更多使用或存在更多问题?+1职位空缺。
JeffO

12
我会警惕任何不雇用VB.NET程序员来执行C#的雇主。
马特·奥莱尼克

@Anonymous:SO在第2天(一年多以前)取代了Google。FireFox在家里有SO,MSDN和Programmers作为我的3个主要搜索站点。
IAbstract

@IAbstract,大声笑,如此真实。
匿名类型

27

我讨厌VB.NET。我仍然花在使用它的日子是我后悔的日子。就是说,我的品味是我处境和经历的一部分,不一定与您的工作有任何关联...

我认为在比较C#和VB.NET等不断发展的语言时,回顾它们的历史并了解它们如何达到当前状态非常重要:

BASIC在微型计算机上的原始优势包括:大小和简单性(小巧,易于解析的语法,用于小型,相当快的解释器,并为实际程序和数据保留了内存空间),支持实验的交互式环境以及语法避免使用简洁的符号和结构来获得清晰,类似英语的语法。但是,它不太适合大型结构化程序,并且倾向于鼓励使用意大利面条式代码。尽管如此,它的可用性和简单性使其成为编程入门的绝佳选择。

QuickBasic更新了语法,以允许使用更大的结构化程序,并添加了编译功能以加快执行速度。

VisualBasic提供了一个功能强大,易于使用的表单生成器,可以快速构建GUI应用程序,同时采用QB语法来编写这些UI的脚本。当用于为作为预构建组件(通常以其他某种语言编写)提供的低级逻辑创建UI时,它效果最好。随着时间的推移,随着新功能的推出,语法变得越来越大且不一致。首先要绘制UI,然后再填充一些脚本的重点对于以UI为中心的小型应用程序效果很好,但是在鼓励重复使用,复杂的数据结构和关注点分离。在许多人的心中,“ VB代码”成为“大泥巴”的代名词。“ VB程序员”和“经验不足的黑客”。

VB.NET是.NET平台上的一种类似于VB的语言,是一种尝试(并非完全成功),用于清理和更新过度使用的VB语法。它与现有的VB代码并不完全兼容,并且不努力提供与VB 表单(可以说是VB 的最重要部分)的兼容性。这给许多VB产品所有者带来了令人不愉快的选择,那就是在VB.NET中有效地重新编写其应用程序(以解决未仔细检查的每个例程中的细微不兼容问题)或实际上在C#中重新编写其应用程序(以一种陌生的方式进行处理)。除了语法新的运行时库和表单设计器)。大多数VB.NET用户都是VB用户,他们只是单纯地坚持使用语法,许多人在学习C#时将其用作拐杖。结果,它立即成为那些陷入困境,不愿或无法扩展或提高技能的程序员的避风港。

在这个时间点上,VB.NET继续发展,缓慢地减少负担,同时采用了新的有趣的语法(LINQ,XML文字)。尽管如此,它几乎没有保留BASIC的原始优势:它是一种大型的复杂语言,具有相当陡峭的学习曲线,并且交互式实验的机会有限。

  • 对于过去30多年坚持使用它的老程序员来说,这不是一个坏选择,只要他们不局限于此。
  • 对于新程序员来说,VB程序与英语之间越来越模糊的相似性几乎不值得向后兼容和社会污名的怪诞点头。
  • 对于新项目,VB.NET是一个奇怪的选择,除非该项目大量涉及该语言为之优化的少数几个任务之一:与类型不佳的COM组件(Office ...)集成(尽管C#4.0大大降低了这一优势) )或内联XML生成。

4
对于C#4,我看不出VB.Net在COM集成方面仍然没有任何优势。我认为内联XML生成可能是有用的功能;我尝试不使用XML(在过去的五年中已经成功!),但是如果我有一个需要生成大量XML的.net项目,则可能会创建一个仅用于XML生成的VB项目。
configurator

3
我很高兴阅读您的答案,但它似乎突然停止了。您提供了有趣的基本历史记录,我认为是正确的。我期待发现您为什么不喜欢VB.NET和/或为什么喜欢C#。“对于新项目,VB.NET是一个奇怪的选择”,为什么?
Tim Murphy

@Tim:我不喜欢VB [.NET],因为我遇到的大多数代码都是无类型的意大利面条代码,这些代码是由几年前从事该工作的程序员编写的(或由此类编码员教过的)。不过,这不一定是其他人不喜欢它的好理由。更好的理由仅仅是该语言对向后兼容性做出了太多让步……而实际上却并非向后兼容。因此,除非您希望编写新的无类型的意大利面条代码...
Shog9

20

我对两者都很熟悉,但是在VB4,VB5和VB6中做了很多早期的编程工作。既然.NET中的两种语言都经过了几次迭代,并且在功能上已经融合了很多,我认为这场辩论完全是愚蠢的,类似于“您最喜欢的颜色是什么”。

就个人而言,出于不同的原因,我俩都喜欢。

VB.NET
许多人谈论C#语法如何更直观,但这是非常主观的,并且很大程度上取决于您刚开始所了解的内容。我会说,如果您是完全客观的人,那么如果您不假设其他语言的先验知识,那么VB.NET语法可能会更直观。例如,在C#和VB.NET中使用相同的程序,对于那些不了解编程的人来说,您认为它更容易理解。对我来说似乎很清楚。

关于此语法的另一点好处是,与包围模型相比,封闭结构(END IF,END WHILE,NEXT X)更加明确。它使代码更具可读性,并且通常使编译器可以更精确地确定行号到底是什么引起编译错误。如果您由于编译器错误而在距问题50行的距离内丢失了括号/分号,您就会明白我的意思。

另外,在我看来,在VB.NET的“胜利”栏中,缺少== / =作为比较/赋值运算符。对每个人都有一个独特的运算符的罕见好处永远不会抵消所有(有时)难以发现的,可帮助创建的缺点。

最后,我讨厌编程语言中的区分大小写。关于VB的抱怨之一是它的行李太多,但是C#继承了C区分大小写的条件。我从来没有遇到过这样的情况:我希望同一范围内的两个标识符仅因大小写而不同。它只会使工作繁忙并使我慢下来。在这方面,VB.NET在我看来比C#更具优势。

C#
程序员喜欢简洁,这就是为什么我认为他们通常偏爱这种语法的原因。它只是具有一定的美学吸引力。但是,从完全实际的角度来看,我喜欢它,因为它与Java,JavaScript和C ++等语言非常相似。

由于我进行了大量需要服务器和客户端编程的Web开发,因此,我发现在C#和JavaScript之间进行精神转换比较容易,这是我经常需要做的。

我也喜欢这样一个事实,那就是,在大多数情况下,如果我不得不过渡到进行Java或C ++编程,那么如果我大多数时候都使用C#,那我会有些先机。


3
+1表示Web开发评论。根据项目,我同时使用了VB.NET和C#,并且发现在C#和Javascript之间来回转换比VB.NET和JS容易得多。
Paperjam

2
“我从未遇到过这样的情况:我希望同一范围内的两个标识符仅因大小写而不同。” 是纯主观的。这正是我偏爱C#的原因之一。如果正确应用了结果,那么例如在构造函数中具有名称的参数name和具有名称的公共属性,Name然后通过进行分配对世界来说可能是有意义的Name = name;。只要您遵守编码标准,否则我同意,那么这可能会引起混乱。
2011年

1
对我来说,需要一种编码标准来避免诸如此类的隐患。解决方法的存在并不能为其辩解。
JohnFx 2011年

用任何编程语言编写草率的代码都应该很困难。不区分大小写只会鼓励草率的代码。区分大小写根本不会减慢您的速度,这是什么样的争论?当您输入大量错字时,它会减慢您的速度,然后让您放慢速度是一件好事。
猎鹰

这只是草率的代码,因为编译器无法解释它。如果所有的编译器都不区分大小写,那么就没关系了。我们的工作不是写要在杂志上打印的代码,而是写能完成工作的代码。“草率”的情况不会抑制这一点。
JohnFx

19

我更喜欢C样式语言的方括号语法,而不是BASIC样式语言的“详细”语法。

我对编程的介绍是使用Turbo Pascal。(我小的时候在Commodore 64上做过的BASIC编程工作就不算什么了。)学习Java之后,我再也没有回过头来,而是喜欢使用C风格的语法。


4
BASIC风格的语言的“详细”语法。” -是的,我再也没有看过VBif something then code endif
TheLQ 2010年

1
呵呵,我很惊讶有人对此表示反对。(我希望这是Emacs vs Vim的问题。)
George Marian 2010年

3
@TheLQ:还有AndAlso!
格里

我想念Turbo Pascal的日子。那很有趣。
MetalMikester 2010年

1
我发现方括号语法更易于阅读。一个块的通用符号,而不是几个上下文相关的单词。
Michael

12

它们在功能上是相同的,在任何一个中您都无法做,而在另一个中您则无能为力,并且对于将来的Microsoft,微软保证语言团队将均匀地发展,因此这等效性不可能改变。

现在的差异纯粹是文化上的和个人上的。本文有趣地阅读了使用C#和VB.net的程序员之间的文化差异。

[注意:尽管我本人是C#开发人员,但链接文章的结论并不一定反映我的个人观点,这只是辩论中一种有趣的替代方法]


8
这不是完全正确的:例如,VB.NET没有迭代器,这是一个很棒的 C#功能。
Thomas Levesque 2010年

2
C#没有VB.NET的XML文字:blogs.msdn.com/b/wriju/archive/2008/02/07/…(尽管出于架构方面的原因我不喜欢该功能,但很酷)
史蒂文Striga

@Thomas @WeekendWarrior:很好的例子,但只是指出,我说的是“功能相同”。它们都可以编译为IL,因此可以实现相同的功能集。这些示例只是可以以其他方式实现的功能的语言快捷方式。
西蒙·史蒂文斯

8

我从C和C ++进入.NET(加入了一些Java,Ada和Pascal),所以C#对我来说是自然而然的进步。

如果有一份需要VB.NET的工作,我当然不会拒绝。


6

我已经使用VB.NET做了很多工作,但是我了解足够的C#来了解代码中正在发生的事情。我当前的偏好是VB.NET,因为我最熟悉它(显然),但是我对冗长的BASIC语法和C样式的语法没有真正的偏好,它们对我来说都非常易于理解。

我的大多数同事的编程背景是COBOL和VB6,因此对于我们团队来说,VB.NET是更舒适的.NET语言选择。我们没有充分的理由将学习C#作为一项要求,因为它们在功能上是相同的。

就是说,学习C#绝对是我要做的事情。


2
我也遇到了麻烦。:)并且我更喜欢VB.NET,就像我更喜欢可乐而不是百事可乐一样。但是,如果我们要开始一个新项目,则C#是最佳选择,因为我们会找到更多了解并喜欢C#的程序员。我知道MS的VB策略是将VB社区引入.NET平台。
Pagotti

5

我更喜欢C#。

我最初是VB.NET程序员,但随着时间的流逝,很明显,很多新功能首先出现在C#中,然后出现在VB.NET中(例如,自动属性)。C#周围的社区比VB.NETs更活跃。

此外,如果您打算学习Java或类似语言,则C#是更好的起点-所有C衍生语言的语法几乎都相同。尽管这对我来说不是小费,因为语法是您可以快速学习的东西。


3
“功能首先进入C#”并非总是那样。参见stackoverflow.com/questions/181188/…(只是在工程中扔另一个扳手)
自我说明-想想一个名字,2010年

这就是我的位置。我仍然很喜欢VB,因为它是我的起点。但是,我认为C#在lambda表达式之类的语法中具有更好的语法。另一方面,VB具有XML文字,而C#只能想到。我认为值得开展一个单独的VB项目来完成繁重的XML工作。
Kyralessa

1
对于每一代工具,“功能”参数都有所改变。从vs2010开始,我唯一能想到的是哪个vb.net缺少的C#是迭代器。相比之下,vb.net提供命名索引器,异常过滤器,XML文字,一个“ Is”运算符,其外观比其好1000倍Object.ReferenceEquals,几乎完成了正确的事件处理,并且提供了更流畅的IDE体验。VB.net使字段初始化器使用构造函数参数或安全地创建IDisposable对象而不必使用ThreadStatic变量成为可能,尽管有些尴尬。C#没有。
超级猫

5

除了此处发布的其他答案之外,我还会选择C#而不是VB,因为C#程序员会获得更高的报酬。C#的更多经验=更多$$ :)

我知道两种语言几乎相同,并且在两种语言之间切换非常容易,但是我认为,当管理人员看到一堆花括号和分号时,他们接受了事实,即在VB中我们正在做他们无法做到的事情。净他们可能会看它,然后说:“哦,如果我能理解的话,一定不要那么难”。


1
我认为,根据行业/地区,通常会忽略一个相当合理的观点。
匿名类型

4

C#,因为我可以轻松地在它和Java之间切换

VB.NET是完全不同的语法。C#与Java和其他语言相似,这使我可以更好地适应新事物。由于C#和VB.NET的输出实际上是可互换的,因此选择C#是有意义的。另外,如果您公司的代码使用C#,则与Java开发人员VB相比,您更有可能训练Java开发人员如何编写C#。只有微妙的优势,但微妙的仍然是优势。


3

撇开我的个人喜好。作为最近一直在招聘(并试图被招聘)的人,当我们在办公室进行辩论时,普遍的共识是我们应该考虑从VB转向C#。

为什么?因为C#在市场上(无论如何都围绕着我们)更普遍,这使我们更容易招募,也更容易招募。

好像已经绕了整整一圈。人们学习C#是因为招聘人员想要C#,因为有更多候选人。


3

我是位年龄稍大的开发人员(比59岁“年龄大一些”吗?),我首先在Commodore VIC-20上学习了BASIC,自学了Turbo Pascal(v1!),然后在大学学习了COBOL,并花了14年的时间在IBM上进行开发大型机,在转而使用VB5和VB6之前,先进行了短暂的转移,然后在Revelation BASIC(PICK BASIC的变体)中编写了中型应用程序,在Modula-2中编写了一些实用程序。然后是.NET。

由于我的基本背景,我认为我应该从VB.NET开始,只是发现我一直试图以“旧”方式做事,这让我发疯(好吧,更多的发疯)。鉴于我已经用C做过一些工作,所以我想我应该给C#旋转一下,看看效果如何。和OMG,就像从黑暗的隧道进入晴朗的日光!完全出乎意料。我曾经大声疾呼说C是一种“只写”的语言-“很难理解,C程序员在写了6个月后就无法弄清楚自己的代码做了什么”。我以为当时那个半著名的小说家听起来很可爱。

因此,由于对C有点陌生,所以与我应该熟悉得多的Basic范例相比,C#对我来说更容易学习.NET编程。我仍然喜欢VB6,但是已经喜欢C#。地球上最好的编程语言。


1
有趣的答案,我认为这至少部分驳斥了“较老的人群”倾向于通过C#坚持VB.NET的观点
匿名类型

3

自2001年以来,我就一直在Visual Basic .Net中进行开发,我喜欢它,但我讨厌它!!!

这些要点的介绍顺序只是基于他想到的顺序。

在带有Visual Studio的vb.net中,每种方法,属性之间都有可视的换行符。对于许多人来说,vb.net而不是c#不是一个很好的理由,但是我不明白为什么Microsoft的c#团队没有实现它。有一个外接程序可以在c#中绘制这条线,但是Microsoft再一次使ac#团队和Visual Basic团队彼此交谈。

在vb.net中,当您创建Winform时,在Visual Studio中的编辑器顶部有两个组合框,并且可以在右侧组合框中选择一个事件时自动自动生成事件。当您每天附加数十个事件时,没有此功能可能非常麻烦。使用c#,在属性网格的顶部有一个小按钮可以生成事件,但速度不如vb.net快。此外,如果在c#中附加控件事件并在窗体上删除控件,则必须手动删除在自动生成的代码上创建的用于处理事件的委托。再次感谢您微软。

在vb.net中,当您尝试修改包含linq查询的方法而不修改查询本身时,没有问题,但是在c#中,所有方法代码均被锁定。如果您有很多linq查询或lambda表达式,那么“编辑并继续”功能将很快成为一门好事。好吧,有点夸张...但是:)

在vb.net中,当您创建方法名称并点击Enter时,将自动创建“ end sub”。在c#中,请自己完成。好的,如果您安装了resharper或devexpress,那会更好,但是为什么所有这些重要功能都无法在c#中实现。

在vb.net中,当您的代码中有错误时,错误会自动显示,并且在您更正错误后,这些错误会实时从堆栈中删除。在c#中,必须构建项目才能认识到是否已成功更正指定的错误。为什么C#团队没有像vb.net这样的选项来实时验证错误。对于大型解决方案,没有实时的错误验证可以很好地优化性能,但是我喜欢在纠正错误时看到一堆错误消失。

就像其他人提到的那样,我认为阅读vb.net条件if..end if,select case ... end select但使用devexpress画括号更容易阅读,忘了我说的话。

使用vb.net,Visual Studio中存在许多错误。仅提及Visual Studio 2010中的一个,如果您激活了“公共”模式而不是“全部”模式,则智能对象不会正确过滤枚举。

使用vb.net时,您会被视为一个笨蛋,因为从静态上看,越来越多的不良程序员使用vb.net而不是c#,因为c#较难学习和推广更好的编程实践。

就像其他人所说的那样,C#程序员更有机会以更多的钱从事一份好工作。

在客户主管中,vb.net =在地下室进行编程并附带大量意大利面条的人。C#=哇,你很聪明。事实是,并不是因为您使用c#编写了一个好的程序,而是静态地,是的。

考虑到所有这些要点,我选择了将所有vb代码转换为c#。我使用面向对象,设计模式,具有标准和严格语法的干净代码的所有最佳实践进行编程,并且可以像这样进行50年的编程,但是从社区的角度来看,我不是一个好的程序员。我将在没有其他最佳实践的情况下将代码转换为c#,我将成为另一个人。一个伟大的人,你必须尊重..... :(开个玩笑... !!!但这是现实。


2

这是一种查看方式:在SO和CodePlex之间,哪种语言更流行?C#或VB.Net?

有时候,跟随人群是一件好事,因为只有在需要时,它才能为您提供帮助。默认情况下,C#将比Vb.Net更快。我相信使用Option Strict可能会使其均衡。我上一次在两者之间比较IL时,VB.Net的类型安全性最终使IL增加了约15%。这转化为额外的开销。而且...给定的语言基本可以完成相同的工作,我会选择速度更快的语言。一般而言,我的便利不应取代用户的使用体验。


2

我想说的是,BASIC仍然流行的唯一原因是它是微软的第一款产品,并且在过去的35年中,它们一直在推销它。它应该早就死了。

话虽如此,我已经在两个大型的.NET项目中工作,并且都是使用VB.Net完成的-尽管有一些C#,因为翻译是一个bit子,或者该构造在VB.Net中不存在。我在VB.Net上看到的唯一优点是,Visual Studio编辑器对它(无论如何以我的经验而言)比对C#更友好-Intellisense似乎更好,自动格式化也更好(请注意,因为我没有使用C#同样,我可能只是在IDE的配置中缺少了一些东西...)

VB.Net的主要缺点是,他们在.NET 1.x中引入了许多VB6-era废话方式,以简化VB6代码的转换。这些东西仍然存在,VB6编码人员正在使用这些“扩展名”而不是使用更中性的.NET类/方法/任何东西来编码新代码。我不知道我问过老板为什么他仍然使用这种废话。“但是……行得通……”对。嘿,我喜欢母狗。

在网上寻求帮助时,我发现绝大多数解决方案都在C#中-请访问MSDN论坛,各种博客等。书籍倾向于使用C#,如果有VB版本,它会成为重点。通常会在几个月后出现(例如Apress的Pro LINQ ....)

许多语言共享C祖先,这使得在C,C ++,C#,Java,PHP和其他一些语言之间切换变得更加容易。PHP在这里有点延伸,但确实有很多类似C的构造。VB?好吧,这几乎是它自己的小事。

我组织中的一位项目负责人最近告诉我,正在使用C#而不是VB开发越来越多的新项目-最终。在我们组织中引入.NET时,由于已经进行了所有VB6编码,因此它们或多或少地正式与VB.Net一起使用。后来让我承认这不是他们的最佳举措的力量。

正如上面的其他人所指出的,我不会拒绝VB.Net项目,但我仍然希望它会在我的工作场所被较新的开发慢慢消除。


1

好吧,今天几乎没有任何真正的理由使用VB.net。在开始时,这只是给VB程序员一种熟悉的语法的方法,但本质上是一种类似于BASIC的C#重映射。因此,它的唯一真正优势是更熟悉的语法,而其BASIC语法也是其唯一的限制。

随着两种语言的发展,唯一的区别是my 伪名称空间。

我建议所有不熟悉C#的.net程序员都应学习它,因为社区规模很大,并且大多数使用较多的语言都使用类似C的语法。


为什么存在VB.NET的另一个重要考虑因素是,它为ASP“经典” / VBScript或VB6中的项目提供了更简单的升级途径。移植大型现有应用程序的工作量要少得多。
JohnFx 2011年

1

VB这种语言对于新手来说更容易阅读,他们倾向于在其中编写第一个,第二个和第三个应用程序,我们都非常清楚我们第一个应用程序的编码方式。

来自C ++,Java等的编程人员已迁移到C#,而VB.NET开发人员则来自VBA,VB和BASIC背景,这是必不可少的非传统程序员。


1

在线的C#代码示例似乎比VB.NET示例更多。不喜欢将它们彼此转换那么困难,但是如果不必的话,为什么还要打扰呢。


1

我更喜欢VB .Net,而不是C#,

  • (97)...
  • (98)因为我在了解C#之前就学习过VB。
  • (99)因为我已经在VB .Net上购买了10,000页的巨著。
  • (100),因为VB没有括号。
  • (101)因为每个人都不喜欢VB。

0

C#。只是因为我已经完成了C和Java,所以我觉得C#对我来说更具可读性。C#适合我,就像VB.NET适合以前的VB程序员一样。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.