31

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

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

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

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

因此,无需深入了解 VB 与 C#,我真的很好奇是否有任何资源可以发送给这些开发人员以平息他们的神经。

期待您的输入!

4

11 回答 11

27

就迁移到 .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 的书现在只有 C#。如果您想了解 .NET 的真正工作原理,IMO 他的书几乎是必读的。

  • 在 .NET 中,您会发现一直使用 lambda 表达式,尤其是在使用 Linq 操作时。IMO VB 的冗长在这里确实成为理解和可读性的障碍,以前所未有的方式:foo.Select(x => x > 50)按照几乎任何标准,它都比foo.Select(Function(x) x > 50). 随着表达式变得更复杂,情况变得更糟。

  • VB6 中的一些最糟糕的做法在 C# 中是不可能的,或者至少更难访问(例如 ReDim Preserve 和 On Error Resume Next)。

  • VB 背负着一些语法,这使得在创建通用 CLR 库时使用起来非常麻烦和混乱。例如,在 C# 中,您使用带括号 [] 的索引器。在 VB 中,您使用括号。这使得子程序的用户很难判断它是索引器还是函数。如果有人试图在 VB 之外使用您的库,那么差异会很重要,但是 VB 开发人员可能倾向于创建应该作为函数的索引器的子例程,因为它们看起来很相似。

  • 我没有这方面的任何数据,但如果你想聘请一组优秀的程序员,最好的程序员通常不太愿意在通过 C# 编写 VB.NET 的商店工作。他们通常担心他们的同事将生成的代码可能是不合标准的 .NET 代码,坦率地说 - 社区中对 VB.NET 开发人员和他们的代码质量存在耻辱。那里。我说了。让火焰开始燃烧吧...

作为一个脚注,在我看来,VB.NET 确实是 MS 错失的机会。它应该是一种将旧的 VB6 代码无缝转换为 .NET 世界的方法——从一开始就具有动态调用和高质量的 COM 互操作性。它最终成为 C# 功能集的近乎克隆,具有更冗长的语法和几乎没有向后兼容性。伤心,真的。很长一段时间以来,它使许多组织无法使用 .NET。话又说回来,也许它迫使过去与“冷火鸡”彻底决裂……

于 2010-10-20T03:49:05.767 回答
23

我过去做过很多 VB6,还有很多 C/C++,当我们的 .NET 大迁移发生时,我毫不怀疑 C# 是要走的路。话虽如此,VB6 人真正应该学习的是 .NET 和 CLR(一个适当的面向对象运行时而不是愚蠢的 COM 前端),而不是语法。专注于这一点,并回避宗教战争。

于 2010-10-20T03:21:12.170 回答
6

这可能无法回答您的问题,实际上它甚至可能与您的回答相矛盾并证明您的朋友是对的,但这里有一个很好的列表,列出了 VB.NET 和 C# 之间的相似之处(和不同之处):

C#/VB.NET 比较

当您查看此列表时,您会注意到这两种语言变得多么相似,并且随着每个新版本的出现,切换的理由可能越来越少。但是,最后,如果您确实进行了切换,维基百科的文章几乎很好地总结了 C# 相对于 VB.NET 的优势:

维基百科文章列出了 C# 优于 VB 的优点,反之亦然

于 2010-10-20T03:20:34.233 回答
4

VB.net 事件语法似乎比 C# 好得多;尽管一个类没有任何方法可以取消订阅它已订阅的所有 WithEvents 处理程序,或者终止其他对象对其事件的所有订阅,这使得避免事件泄漏有点困难,但在这方面它并不比 C# 差.

此外,在 vb.net 中,可以让 finally 处理程序知道其 Try 块中发生了什么异常(如果有),而无需实际捕获它。如果在 finally 块中发生任何异常,则原始异常可以包含在 CleanupFailedException 中(以及在 finally 块中发生的其他异常)。这似乎是一个不错的优势。

于 2010-10-20T04:29:14.503 回答
4

“开发人员可能会陷入对 VB.NET 熟悉的错误感觉——在不了解完整概念的情况下像在 VB6 中那样对待资源。” (@马克尔)

我以前没有用这个来争论,但这是一个很好的观点。当我拿起一个 VB.NET 应用程序时,它是由一群刚接触 .net 的 VB 程序员编写的,它充斥着对旧 VisualBasic 命名空间的遗留兼容性调用。CStr()、VbNewLine、Mid() 等... 使用不支持旧代码转换的语言工作会阻止使用这些遗物。(删除对旧命名空间的引用也是如此,仅供参考。)

我经常在 VB.NET 和 C# 之间切换。每当我从 VB 转到 C# 时,我都会想“这是不同的,我需要几分钟来调整。” 每当我从 C# 转到 VB 时,我都会想“这是一种效率低下的编程语言;需要输入太多内容,真烦人。”

于 2010-10-21T01:26:54.353 回答
3

reasons why VB6 developers should switch to C#

Others have given technical reasons for C# over VB.NET, but I think you are dealing with a people issue, so I'll offer what I think is the most compelling reason why the developers should prefer it:

  • C# developers get paid more than VB.NET developers, for doing exactly the same thinking, just typing different source code after doing that thinking

Also

  • ReSharper for C# is better than ReSharper for VB.NET
于 2010-10-20T12:15:44.837 回答
3

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

快速搜索 SO 职业:

  • 92 个 c# 的职位空缺
  • vb.net 的 11 个职位发布
  • vb6 的 1 个职位发布
于 2010-10-20T03:50:55.877 回答
2

除了技术/社会优势更面向商业,VB6 的主流支持已经结束,而昂贵的扩展支持也将很快结束。在这种情况下,迁移到新平台更具有商业意义。此外,微软不再支持 IDE,因此如果出现问题,您将成为 SOL,并且将其安装在闪亮的新笔记本电脑上可能会带来不愉快的体验。

请注意,他们不需要移植每个应用程序,只需弃用需要用 com 公开的 .Net 程序集替换的部分。

另一方面,拥有将软件从过时平台移植到新平台的经验将使这些人变得富有,只要他们愿意学习新平台。

于 2010-10-20T13:34:49.317 回答
2

C# 相对于 VB6 的最大优势在于继承。

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

其他优点:

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

以下内容与 .NET 平台的关系比语言本身更重要:

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

最后,流行度的说法总是令人讨厌(流行 <> 好),但它确实给出了每个人的社区规模的概念,因此可以提供哪些帮助以及该行业的总体发展方向。

关于 SO 的问题:

于 2010-10-20T03:22:53.587 回答
1

VB6 不是完全面向对象的,并且缺乏一套像样的集合/结构。VB.Net 和 C# 都是完全面向对象的,并且包含一组像样的集合类作为 .NET 的一部分。.NET 2 还添加了泛型以获得更大的灵活性。

我同意那些认为 VB.Net 有点多余的人的观点——它解决了 VB6 的问题,最终与 C# 一起成为了“我也是”的人。话虽如此,我做了很多 COM 互操作,发现 VB.Net 的老式 ON ERROR 构造了一种处理超时和函数重试的便捷方式。你可以用 try...catch 来做,只是它更复杂。

于 2010-10-21T00:44:25.300 回答
0

关于 SO 的问题:

[C#]: 116,337
[VB.NET]: 11,740
[VB6]: 1,897

这证明不了。VB6 早在 SO 出现之前就已经存在了。所有优秀的 VB 程序员都学会了他们需要知道的东西,而 MSFT 已经废除了 VB6。大多数新的 MSFT 初学者涌向 C# 是因为他们对任何 BASIC 的非理性仇恨(仍然存在 - 只需看看 Xojo),当然还有 MSFT 营销。但是现在他们觉得 C# 与 Windows 8 平台上的 C++ 相比变化不大?(例如 XNA 消失了)。市场非常需要 C# 而不是 VB.net。

于 2014-01-25T11:37:17.250 回答