【问题标题】:Is there a way to escape root namespace in VB?有没有办法在 VB 中转义根命名空间?
【发布时间】:2010-11-21 14:50:13
【问题描述】:
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            System.Text.MyCustom mc = new System.Text.MyCustom();  
        }
    }
}

namespace System.Text
{
    public class MyCustom { }
}

我如何在 VB 中做到这一点,同时在应用程序中有根命名空间,这可能吗?

更新: 根据答案,我认为没有办法做到这一点。 我向 Microsoft Connect 发布了功能建议:Please vote

【问题讨论】:

  • 如果不删除应用程序的根命名空间,您将无法执行此操作。实现您想要的唯一方法是删除根命名空间,并在代码中的任何位置显式设置命名空间。在 C# 项目中,您没有根命名空间,只有默认命名空间,这正是您在这里所要求的。抱歉,这是 VB.NET 和 C# 的区别之一。
  • 敬畏:这应该是下面的答案..

标签: c# vb.net language-features namespaces


【解决方案1】:

在 VB.NET 中设置命名空间与在 C# 中声明命名空间几乎相同,只是使用 VB.NET 语法!不幸的是,根命名空间始终存在,因此声明的任何新命名空间都将位于根命名空间内。

Namespace ConsoleApplication1
  Class Program
    Private Shared Sub Main(ByVal args As String())
        Dim mc As New System.Text.MyCustom()
    End Sub
  End Class
End Namespace

Namespace System.Text
  Public Class MyCustom
  End Class
End Namespace

如果根命名空间是Test,上述代码将为您提供以下信息。

Test.ConsoleApplication1
Test.System.Text


为 cmets 干杯,正在记忆中发帖!

【讨论】:

  • 试试你写的,然后在对象浏览器中查找。
  • 它被添加到 ConsoleAppllication1.System.Text 中,与 C# 不同。当然,我可以将 root-namespace 设置为 null,但这不是我想要的。
  • 此外,我猜Program 类在上面的示例中位于命名空间ConsoleApplication1.ConsoleApplication1 中(虽然我没有vb.net 环境来验证它)。跨度>
【解决方案2】:

在 VS 2012 的 VB.NET 中,这个老问题得到了修复。从这个版本开始,您可以使用前导 global 转义根命名空间。以下代码在 VS 2010 中有错误,在 VS 2012 中是正确的:

Imports Tools

Module Module1
    Sub Main()
        SayHello()
    End Sub
End Module

Namespace Global.Tools
    Module TestModule
        Sub SayHello()
            Console.Out.WriteLine("Hello")
        End Sub
    End Module
End Namespace

【讨论】:

【解决方案3】:

我可以通过 VB 项目的项目属性更改根命名空间。这默认与项目名称相同,但您可以将其删除,然后您就可以在代码中使用命名空间结构的全部功能。缺点是您必须在代码中任何需要它的地方指定项目名称作为命名空间...

对于 C# 项目,项目属性中的类似设置只是默认命名空间,如果您在代码中指定命名空间,则会覆盖该命名空间。对于 VB 项目,它指定顶级命名空间,而不是默认的......

【讨论】:

    【解决方案4】:

    看看这个问题:Possible to override VB.NET root namespace?

    最重要的是,您唯一的选择是将项目属性中的默认命名空间留空,然后将所有类/模块定义包装在命名空间语句中。

    【讨论】:

      【解决方案5】:

      我认为可悲的事实是你不能。命名空间附加到根命名空间。 The documentation 没有暗示任何转义机制。有一条关于在命名空间中使用 Global 关键字的注释,但我将这部分文本解释为讨论如何引用命名空间而不是如何声明它们。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-15
        • 2011-12-22
        • 2019-08-26
        相关资源
        最近更新 更多