【问题标题】:Drawbacks of combining C#.NET and VB.NET结合 C#.NET 和 VB.NET 的缺点
【发布时间】:2012-04-28 02:11:51
【问题描述】:

我是一名长期的 V​​B.NET 开发人员,最近切换到 C#。我发现一些内置的 VB.NET 函数(早于 .NET 回到 6.0 和 BASIC 本身),例如 String.Left 或 Right,或保存到注册表(SaveSettings)等高级函数和GetSettings) 明显不存在。

我所做的是在相同的解决方案中创建一个新项目,并使用 VB.NET 作为其语言,并基本上重新创建我需要的所有在 VB.NET 中可用的功能。然后我将其调用到我正在编写的 C# 代码中。

由于在 .NET 中编译代码几乎可以归结为相同的 CIL,因此在性能方面我用什么语言编写代码或是否将 C# 与 VB 混合使用都无关紧要。

我是对还是错?

谢谢

【问题讨论】:

  • @Devmonster 看看这个话题。我想你会发现它会对你有所帮助。 stackoverflow.com/questions/1133265/…
  • @David 这是一本很棒的读物。谢谢!我意识到如果其他人必须修复我的代码,您需要同时拥有 c# 和 vb.net 的资源。虽然我正在考虑像我提到的那些基本功能,但对于经验丰富的开发人员来说不应该是一个挑战
  • @MitchWheat 那是我想要使用的,而不是编写我自己的 C# 代码(据我所知,这可能效率低下)
  • @Devmonster 我明白了。主要的理想是在项目中管理多种语言会很费力,无论是您自己还是与他人一起。我很高兴您喜欢阅读并希望它有所帮助。

标签: c# .net vb.net


【解决方案1】:

有一个命名空间Microsoft.VisualBasic,你也可以在C#项目中使用它:

string test = Microsoft.VisualBasic.Strings.Left("abc", 2);

不要忘记将Microsoft.VisualBasic 添加到项目的引用中。

【讨论】:

  • 这也让我想到了,因为 VB6 中几乎所有的函数都在这个命名空间中,所以使用它是有意义的。但是,我想我想将我的 C# 代码全部保留为 C#,并且只在 VB 等其他项目中调用对象,以保持它的清洁。不过还是谢谢你的建议
  • IMO 在 C# 中使用 Microsoft.VisualBasic 命名空间与在整个项目中混合 VB.NET 和 C# 相比具有相同或更好的可读性和可维护性。 C# 开发人员能够通过 MSDN 轻松理解这些方法在做什么,但不太可能快速阅读 VB.NET 模块。此外,这个程序集是整个 .NET Framework 的一部分,而不是 VB.NET 的一部分。请参考:stackoverflow.com/questions/226517/….
【解决方案2】:

我建议构建它,然后使用反射器/ilspy/whatever 反编译回 C# :)

【讨论】:

    【解决方案3】:

    根据我的经验,这几乎完全取决于人们对语言的偏好和经验。您猜对了,性能方面并不重要——这两种语言都是为了生成 IL 和针对 CLR 而构建的。

    在选择一种语言时还有其他值得商榷的考虑因素,因为一种语言完全支持的某些功能不受另一种语言的支持。此外,有些语言只是为了某些目的而更具表现力,例如用于数学计算的 APL。

    【讨论】:

      【解决方案4】:

      虽然使用 Microsoft.VisualBasic 命名空间是一个很好的解决方案,但 VB.NET 具有等效的功能(尽管字符串函数是从零开始的,而不是从 1 开始的),例如

              string str = "abcdefg";
      
              string left  = str.Substring(0, 2);                // Left(str, 2)
              string right = str.Substring(str.Length - 2, 2);   // Right(str, 2)
      

      顺便说一句,注册表访问方法在Microsoft.Win32命名空间中:参见RegistryKey等。

      【讨论】:

      • 一个在 C# 中不可用的 vb.net “字符串函数”是在 = 的左半部分使用 mid。例如,可以说mid(myString,3,2)="OK" 来更改字符串的第三个和第四个字符。实际行为本质上是myString = myString.SubString(0,2) & "OK" & myString.SubsString(4),但更容易阅读。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-30
      • 2016-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-18
      • 1970-01-01
      相关资源
      最近更新 更多