令人信服的遗留应用程序VB6开发人员切换到C#

时间:2010-10-20 03:09:35

标签: c# asp.net vb6 vb6-migration

我知道这个问题可能与其他人类似,但实际上我正在寻找VB6开发人员应该切换到C#的原因。

我公司最近批准了用C#编写的项目,所以我们有很多VB.Net程序员,但是,我们有一些遗留的应用程序开发人员也在VB6中。我们有时间框架将这些应用程序重新编写为.Net网络应用程序。所以无论他们将要学习什么新东西。

今天的一位开发人员明确询问“我们为什么要切换到C#?”

我回答说,社区在很大程度上已经决定使用C#来实现C#中大约80%的示例。我是一名VB.Net程序员,我很高兴终于开始研究C#,但是,由于我是如此新,我不确定我能回答“为什么?”题。我的理由更多是因为我想学习它。

所以,如果没有下载到VB#C#中,我真的很好奇,如果有任何资源可以发送给这些开发人员以平息他们的神经。

期待您的投入!

11 个答案:

答案 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 comparison

当你进入这个列表时,你会注意到两种语言的相似程度,每个新版本的转换可能会越来越少。但是,最后,如果你做了转换,维基百科的文章几乎总结了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的最大优势必须是继承。

(好吧,公平地说,这是我个人的最爱,所以我完全有偏见。)

其他优点:

  • 正式访问者
  • 异常类型(我不认为VB6有异常类型,但如果我错了请纠正我)
  • 泛型
  • Lambda表达式

以下与.NET平台的关系比语言本身更多:

  • 非常丰富的图书馆
  • Visual Studio重构和其他好东西

最后,人气论证总是很蹩脚(流行<>好),但它确实提供了每个人的社区规模,因此可以获得哪些帮助以及整个行业的发展方向。

关于SO的问题:

答案 6 :(得分:3)

我认为其他答案在掩盖技术要点方面做得很好。我还要向你的vb6开发人员指出,不仅有更多针对c#的书籍,还有更多关于c#的SO的问题,但也许对他们来说更重要的是,更多的工作列表。

快速搜索SO职业:

  • c#
  • 的92个职位发布
  • vb.net的11个职位发布
  • 1个职位发布vb6

答案 7 :(得分:3)

  

VB6开发人员应该切换到C#

的原因

其他人已经给出了C#over VB.NET的技术原因,但我认为你正在处理问题,所以我会提供我认为最令人信服的理由 >开发人员应该更喜欢它:

  • C#开发人员比VB.NET开发人员获得更多报酬,因为完全相同思考,只是在做了那些思考后输入不同的源代码

另外

  • C#的ReSharper优于VB.NET的ReSharper

答案 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。