我知道这个问题可能与其他人类似,但实际上我正在寻找VB6开发人员应该切换到C#的原因。
我公司最近批准了用C#编写的项目,所以我们有很多VB.Net程序员,但是,我们有一些遗留的应用程序开发人员也在VB6中。我们有时间框架将这些应用程序重新编写为.Net网络应用程序。所以无论他们将要学习什么新东西。
今天的一位开发人员明确询问“我们为什么要切换到C#?”
我回答说,社区在很大程度上已经决定使用C#来实现C#中大约80%的示例。我是一名VB.Net程序员,我很高兴终于开始研究C#,但是,由于我是如此新,我不确定我能回答“为什么?”题。我的理由更多是因为我想学习它。
所以,如果没有下载到VB#C#中,我真的很好奇,如果有任何资源可以发送给这些开发人员以平息他们的神经。
期待您的投入!
答案 0 :(得分:25)
就迁移到.NET而言,迟到总比没有好!就我的建议而言,你的里程可能会有所不同,值得为你付出的每一分钱!
我个人认为你正在做出正确的选择。 VB开发人员的第一直觉是切换到VB.NET。这听起来完全合理,但在我看来,这是错误的选择。您真的必须将转换为两类的原因分解:为什么要切换到.NET,以及为什么要切换到C#?
为什么要通过VB6切换到.NET:
从编程的角度来看,VB6中的多线程技术是可行的,但如果你想使用IDE,几乎是不可能的。
我不相信你可以在VB6中创建一个64位的本机应用程序。这排除了很多。
没有对VB6进行任何新的增强。
好的,有很多我能想到的理由,我可能会就此止步。
为什么要切换到C#而不是VB.NET
开发人员可能会对VB.NET缺乏熟悉的感觉 - 在不理解完整概念的情况下处理VB6中的资源。一个例子:你经常看到新的转换为VB.NET设置对象为Nothing,认为这是一种释放资源的神奇方式。事实并非如此。
大多数例子现在都在C#中。更重要的是,Jeff Richter's book现在只在C#中。如果你想了解.NET是如何工作的,IMO的书非常强制性。
在.NET中,您会发现您将始终使用lambda表达式,尤其是在使用Linq时。 IMO VB's verbosity在这里真正成为理解和可读性的障碍,其方式与以前不同:foo.Select(x => x > 50)
几乎是任何标准,比foo.Select(Function(x) x > 50)
更流畅,更易读。随着表达式变得更复杂,情况会变得更糟。
使用VB6的一些最糟糕的做法是不可能的,或者至少在C#中不太容易访问(例如ReDim Preserve和On Error Resume Next)。
VB背负着一些语法,这使得在创建通用CLR库时使用它非常麻烦和困惑。例如,在C#中,您使用带括号[]的索引器。在VB中,你使用parens。这使得子例程的用户很难判断它是索引器还是函数。如果有人试图在VB之外使用你的库,那么差别很重要,但VB开发人员可能倾向于创建子程序,这些子程序应该是索引器作为函数,因为它们看起来很相似。
我没有这方面的任何数据,但如果你想聘请一批优秀的程序员,那么最好的程序员通常不太愿意在一个将VB.NET写在C#上的商店里工作。他们通常担心他们的同事会生成的代码可能是不合格的.NET代码,让我们坦率地说 - 对于VB.NET开发人员和他们在社区中的代码质量存在耻辱。那里。我说了。让火焰开始......
作为一个脚注,从我的角度来看,VB.NET是一个真正错过了MS的机会。本来应该是一种将旧的VB6代码无缝转换为.NET世界的方法 - 从一开始就使用动态调用和高质量的COM互操作。它最终成为了C#功能集的近乎克隆,其语法更加冗长,几乎没有向后兼容性。伤心,真的。很长一段时间,它已经将很多组织锁定在.NET之外。然而,也许它迫使过去的“冷火鸡”干净的休息......
答案 1 :(得分:22)
我以前做过很多VB6和很多C / C ++,当我们进行大规模的.NET迁移时,我毫不怀疑C#是要走的路。话虽如此,VB6人员应该学习的是.NET和CLR(一个适当的面向对象的运行时而不是一个愚蠢的COM前端),而不是语法。专注于此,并回避宗教战争。
答案 2 :(得分:6)
这可能无法回答你的问题,事实上它甚至可能与你的回答相矛盾并证明你的朋友是正确的,但这里列出了VB.NET和C#之间的相似之处(和差异):
当你进入这个列表时,你会注意到两种语言的相似程度,每个新版本的转换可能会越来越少。但是,最后,如果你做了转换,维基百科的文章几乎总结了C#对VB.NET的优势:
Wikipedia article listing advantages of C# over VB and vice versa
答案 3 :(得分:4)
VB.net事件语法似乎比C#好得多;虽然缺少任何方法让一个类取消订阅它已订阅的所有WithEvents处理程序,或者杀死其他对象对其事件的所有订阅,使得避免事件泄漏变得有点困难,但在这方面它并不比C#差
此外,在vb.net中,可以让一个Finally处理程序知道它的Try块中发生了什么异常(如果有的话),而不必实际捕获它。如果在Finally块中发生任何异常,则原始异常可以包含在CleanupFailedException中(以及Finally块中发生的其他异常)。这似乎是一个很好的优势。
答案 4 :(得分:4)
“开发人员可能会误解为对VB.NET的熟悉感 - 像在VB6中那样处理资源而不了解完整的概念。” (@Markle)
我之前没有用过这个参数,但这是一个非常好的观点。当我拿起一堆由new-to.net VB程序员编写的VB.NET应用程序时,它充斥着旧的VisualBasic命名空间的旧版兼容性调用。 CStr(),VbNewLine,Mid()等...使用不支持遗留代码转换的语言工作会阻止使用这些文件。 (删除对旧命名空间的引用,仅供参考。)
我经常在VB.NET和C#之间切换。每当我从VB转到C#时,我认为“这是不同的,我需要花几分钟时间来调整。”每当我从C#转到VB时,我认为“这是一种低效的编程语言;需要太多的打字,多么烦人。”
答案 5 :(得分:3)
C#优于VB6的最大优势必须是继承。
(好吧,公平地说,这是我个人的最爱,所以我完全有偏见。)
其他优点:
以下与.NET平台的关系比语言本身更多:
最后,人气论证总是很蹩脚(流行<>好),但它确实提供了每个人的社区规模,因此可以获得哪些帮助以及整个行业的发展方向。
关于SO的问题:
答案 6 :(得分:3)
我认为其他答案在掩盖技术要点方面做得很好。我还要向你的vb6开发人员指出,不仅有更多针对c#的书籍,还有更多关于c#的SO的问题,但也许对他们来说更重要的是,更多的工作列表。
快速搜索SO职业:
答案 7 :(得分:3)
VB6开发人员应该切换到C#
的原因
其他人已经给出了C#over VB.NET的技术原因,但我认为你正在处理人问题,所以我会提供我认为最令人信服的理由 >开发人员应该更喜欢它:
另外
答案 8 :(得分:2)
除技术/社会优势外,更注重业务, 对VB6的主流支持已经结束,而且肯定很昂贵的扩展支持将很快结束。 在这种情况下迁移到新平台更具商业意义。 此外,微软不再支持IDE,因此如果出现问题,您将成为SOL,并将其安装在闪亮的新笔记本电脑上可能会提供不愉快的体验。
请注意,它们不需要移植每个应用程序,只需弃用需要用com暴露的.Net程序集替换的部分。
另一方面,将软件从过时平台移植到新平台的经验将使这些人变得富有,只要他们愿意学习新平台。
答案 9 :(得分:1)
VB6不是完全面向对象的,缺乏一套体面的集合/结构。 VB.Net和C#都是完全面向对象的,并且包含一组不错的集合类作为.NET的一部分。 .NET 2还添加了泛型以获得更大的灵活性。
我同意那些认为VB.Net有点多余的人 - 它解决了VB6的问题,并最终成为了一个“我也是”和C#一起。话虽如此,我做了很多COM互操作,发现VB.Net的老式ON ERROR构造了一种处理超时和功能重试的便捷方式。你可以试试看......抓住它就更复杂了。
答案 10 :(得分:0)
关于SO的问题:
[C#]: 116,337
[VB.NET]: 11,740
[VB6]: 1,897
这证明什么都没有。 VB6早在SO之前就存在了。所有优秀的VB程序员都学会了他们需要知道的东西,MSFT已经废除了VB6。大多数新的MSFT初学者都涌向C#,因为他们对任何BASIC(仍然存在 - 只看Xojo)以及MSFT营销的任何理解都是非理性的。 但是,与Windows 8平台上的C ++相比,他们现在对C#的变化感觉如何呢? (例如XNA消失了)。 市场几乎要求C#而不是VB.net。