我去过的工作场所在项目开始时就提出了“我们应该使用VB.Net还是C#”的问题。
诚然,与.Net早期相比,现在做出决定的可能性可能不大。特别是考虑到语言融合的趋势,但这仍然是一场激烈的辩论。
那么,在VB.Net和C#之间,您首选哪种语言,为什么呢?
我去过的工作场所在项目开始时就提出了“我们应该使用VB.Net还是C#”的问题。
诚然,与.Net早期相比,现在做出决定的可能性可能不大。特别是考虑到语言融合的趋势,但这仍然是一场激烈的辩论。
那么,在VB.Net和C#之间,您首选哪种语言,为什么呢?
Answers:
与VB.NET相比,我更喜欢C#,因为
(来自stackoverflow)
我讨厌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的原始优势:它是一种大型的复杂语言,具有相当陡峭的学习曲线,并且交互式实验的机会有限。
我对两者都很熟悉,但是在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#,那我会有些先机。
name
和具有名称的公共属性,Name
然后通过进行分配对世界来说可能是有意义的Name = name;
。只要您遵守编码标准,否则我同意,那么这可能会引起混乱。
我更喜欢C样式语言的方括号语法,而不是BASIC样式语言的“详细”语法。
我对编程的介绍是使用Turbo Pascal。(我小的时候在Commodore 64上做过的BASIC编程工作就不算什么了。)学习Java之后,我再也没有回过头来,而是喜欢使用C风格的语法。
if something then code endif
它们在功能上是相同的,在任何一个中您都无法做,而在另一个中您则无能为力,并且对于将来的Microsoft,微软保证语言团队将均匀地发展,因此这等效性不可能改变。
现在的差异纯粹是文化上的和个人上的。本文有趣地阅读了使用C#和VB.net的程序员之间的文化差异。
[注意:尽管我本人是C#开发人员,但链接文章的结论并不一定反映我的个人观点,这只是辩论中一种有趣的替代方法]
我已经使用VB.NET做了很多工作,但是我了解足够的C#来了解代码中正在发生的事情。我当前的偏好是VB.NET,因为我最熟悉它(显然),但是我对冗长的BASIC语法和C样式的语法没有真正的偏好,它们对我来说都非常易于理解。
我的大多数同事的编程背景是COBOL和VB6,因此对于我们团队来说,VB.NET是更舒适的.NET语言选择。我们没有充分的理由将学习C#作为一项要求,因为它们在功能上是相同的。
就是说,学习C#绝对是我要做的事情。
我更喜欢C#。
我最初是VB.NET程序员,但随着时间的流逝,很明显,很多新功能首先出现在C#中,然后出现在VB.NET中(例如,自动属性)。C#周围的社区比VB.NETs更活跃。
此外,如果您打算学习Java或类似语言,则C#是更好的起点-所有C衍生语言的语法几乎都相同。尽管这对我来说不是小费,因为语法是您可以快速学习的东西。
Object.ReferenceEquals
,几乎完成了正确的事件处理,并且提供了更流畅的IDE体验。VB.net使字段初始化器使用构造函数参数或安全地创建IDisposable
对象而不必使用ThreadStatic
变量成为可能,尽管有些尴尬。C#没有。
C#,因为我可以轻松地在它和Java之间切换
VB.NET是完全不同的语法。C#与Java和其他语言相似,这使我可以更好地适应新事物。由于C#和VB.NET的输出实际上是可互换的,因此选择C#是有意义的。另外,如果您公司的代码使用C#,则与Java开发人员VB相比,您更有可能训练Java开发人员如何编写C#。只有微妙的优势,但微妙的仍然是优势。
我是位年龄稍大的开发人员(比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#。地球上最好的编程语言。
自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#,我将成为另一个人。一个伟大的人,你必须尊重..... :(开个玩笑... !!!但这是现实。
我想说的是,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项目,但我仍然希望它会在我的工作场所被较新的开发慢慢消除。
好吧,今天几乎没有任何真正的理由使用VB.net。在开始时,这只是给VB程序员一种熟悉的语法的方法,但本质上是一种类似于BASIC的C#重映射。因此,它的唯一真正优势是更熟悉的语法,而其BASIC语法也是其唯一的限制。
随着两种语言的发展,唯一的区别是my
伪名称空间。
我建议所有不熟悉C#的.net程序员都应学习它,因为社区规模很大,并且大多数使用较多的语言都使用类似C的语法。
我更喜欢VB .Net,而不是C#,