【问题标题】:VB runtime functions in VB.NET for VB6 programmers [closed]面向 VB6 程序员的 VB.NET 中的 VB 运行时函数 [关闭]
【发布时间】:2008-10-28 00:22:13
【问题描述】:

我正在为迁移到 .NET 平台的 Visual Basic 6 程序员准备关于 Visual Basic 2005 的课程。

我主要关心的是教我的学生使用 .NET 进行开发的最佳实践,我想知道是否考虑使用 VB 运行时函数 VB.NET 合法与否。

我已经阅读到 VB.NET 中的许多 VB 函数实际上调用了 .NET Framework 上的方法,因此它们的存在似乎主要是为了简化从早期版本的 Visual Basic 到 VB.NET 的转换。但是,the VB.NET team 似乎建议尽可能使用它们,因为他们声称他们在 .NET 框架 API 之上进行了一些优化。

您对此有何看法?

【问题讨论】:

标签: .net vb.net vb6


【解决方案1】:

在我所处的位置,我必须经常在 C# 和 VB.Net 之间来回移动。考虑到这一点,我们真的不喜欢旧的 VB 函数,尤其是字符串函数:Trim(), Replace(), Len(), UCase() 等。它们在 .Net 程序中看起来很奇怪,我不想在我的代码中看到它们继续工作。

唯一的例外可能是Len(),如果您使用of 措辞在脑海中阅读代码。在这种情况下,将Len(theString) 读作length of theString 似乎是有道理的。在其他情况下,它更多的是由字符串执行的操作,所以我想看看 . (点)符号。

另一方面,我很难摆脱转换运算符:CStr, CInt, CDbl 等。

我无法告诉你为什么我喜欢一种而不喜欢另一种;可能只是我觉得 Convert.To___() 过于冗长,或者可能与它们是 operators 而不是函数有关。

编辑
这一点在我的帖子的其余部分中有点丢失,所以我想再次强调一下:

在很多地方,VB.Net 与 C# 共存。我认为您看到的仅限 VB.Net 的商店不像 C# 那样多。它只是不那么流行,许多 VB.Net 商店迁移到 VB.Net 只是作为一种过渡状态,而程序员也学习 C#。 在这些混合环境中,如果在新代码中严格禁止旧的 VB 函数,这很有意义。 你永远不知道什么时候需要移动一个模块,并且有一些共同的想法必须能够同时掌握两种风格的开销。所以不理解两者真的是个坏主意。

【讨论】:

  • 不确定您所说的 VB.NET “不太受欢迎”是什么意思 - 但 .NET 托管语言组的 Microsoft PM 丽莎·费根鲍姆说,目前 VB.NET 开发人员略多一些比 C#。 infoq.com/news/2009/06/Future-VB.NET
  • (顺便说一句,我给了你+1!)另一个小分歧。如果您使用 Replace(s,"a","b") 而不是 s.Replace("a","b"),我认为它可以帮助您避免经典的“不可变字符串”错误。比如这里sholsinger犯的错误stackoverflow.com/questions/1112553/…
  • 听着,如果可以的话,我会投票一百次!我见过开发人员编写的最可怕的代码,他们认为他们可以不学习 VB.NET,因为他们的 VB6 代码可以工作。
【解决方案2】:

嗯,我想你必须从表面上看。我主要是一名 C# 程序员,但过去 6-8 周一直在开发 VB.NET Web 应用程序。

我的裤子估计表明,使用 CInt、CDate 等转换函数与使用 Convert.Toxxx 方法一样快。

我的建议是:如果它更容易,并且没有性能损失,那就去吧!我也会教他们 .NET 方法,让用户自己决定。

顺便说一句,作为一个 C# 人,我喜欢 Cxxx 例程的简单性。仅仅因为它们仅在 VB.NET 中可用并不意味着您不应该使用它们(恕我直言)。课程用马等等。

【讨论】:

  • 为 Microsoft.VisualBasic 添加 using 指令,您也可以在 C# 中使用它们。
【解决方案3】:

VB6 程序员在迁移到 VB.NET 时已经有很多东西需要学习。为什么不先让他们使用 VB 功能,而是教他们 .NET 框架版本。稍后他们可以切换到 .NET 框架功能,特别是如果他们也可能需要使用 C#。

编辑(很久以后):两位著名的 VB 大师持相反的观点!

  • Francesco Balena(在他的畅销书 Programming Microsoft Visual Basic 2005: The Language 中)建议前 VB6 开发人员在熟悉新语言后立即学习 .NET 语法,并尽可能避免在 Microsoft.VisualBasic 命名空间中使用方法和类 [p. 100]。他的观点是,一般来说,原生 .NET 方法提供了更好的灵活性,学习它们是一种投资,以防您以后需要使用 C# 或其他 .NET 语言。
  • Dan Appleman(在他的畅销书Moving to VB.NET: Strategies, Concepts, and Code)建议您随意坚持使用本机 Microsoft.VisualBasic 命名空间,避免仅使用 Microsoft.VisualBasic.Compatibility.VB6 命名空间 [p. 265]。他的观点是 Microsoft.VisualBasic 是 .NET 框架的核心部分。

【讨论】:

  • 感谢您强调这两本书,非常有趣。
  • 如果您是一个迟到迁移到 .NET 的 VB6 程序员,它们都值得一读。 (例如,erm,我!)Dan Appleman 的一些内容对于最新的框架版本并不正确,但他非常擅长解释概述,仍然值得一读。
  • 很棒的评论,Dan Appleman 的观点非常好。 +Compatibility+ 命名空间可能应该远离,除非你有很好的理由。 MS.VisualBasic 命名空间 OTOH 非常适合在 Iron Python、C# 等中使用。它是核心的一部分,其中的一些功能非常方便。
  • 又一次投票支持 Appleman 的 cmets。兼容性,是的,避免它。但是 VB 命名空间呢?它不会去任何地方,除了那里有一些东西在 C# 中也很方便使用。
【解决方案4】:

如果您想教授可以在语言之间来回移动的 .Net 框架最佳实践,我建议您删除 Microsoft.VisualBasic 的全局导入。这实际上迫使您执行 Microsoft.VisualBasic.Trim() 等。而不仅仅是“Trim()”。

如果我没记错的话,在 Visual Studio 2008 中,您现在可以一起删除 vb.net 中“纯”.Net 模式的引用,这样可以更轻松地在语言之间来回切换。

如果您只是在教 vb.net 人,就像上面提到的海报一样,请使用它们,因为它们可用并且需要更少的输入。

【讨论】:

    【解决方案5】:

    如果您同时提到框架方法和 VB.NET 函数,您可能应该提到的一件事是,尽管它们有时感觉它们是相同的,但它们实际上可以做一些微妙的不同的事情。

    例如,字符串的等号运算符将空字符串视为与 String.Empty 相同(请参阅The real cost of performance,了解当您忘记时会发生什么!)

    此外,VB.NET 函数通常会为执行相关操作提供良好的默认设置,但在您需要更多控制的情况下,通常需要返回到框架方法 - 例如,如果您需要到make string conversions in a different culture

    【讨论】:

      【解决方案6】:

      如果您正在教授 VB,那么这些函数就是 VB 的一部分。如果您正在教授 .Net 框架,那么这些功能不是框架的一部分。如果您正在努力完成工作并且您有可用的工具,请使用您的工具。

      【讨论】:

      • 其实are是框架的一部分。如果需要,您甚至可以从 C# 中使用它们。
      猜你喜欢
      • 2011-02-11
      • 1970-01-01
      • 2011-12-22
      • 2012-03-04
      • 1970-01-01
      • 2012-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多