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。
答案 0 :(得分:14)
在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
答案 1 :(得分:5)
我认为可悲的事实是你做不到。命名空间附加到根命名空间。 The documentation没有提示任何逃避机制。关于命名空间使用Global
关键字有一个注释,但我将文本的一部分解释为如何引用命名空间而不是如何声明命名空间。
答案 2 :(得分:1)
看看这个问题:Possible to override VB.NET root namespace?。
底线是你唯一的选择是在项目属性中保留默认命名空间为空,然后在Namespace语句中包装所有类/模块定义。
答案 3 :(得分:0)
在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
为评论家干杯,在记忆中张贴!
答案 4 :(得分:0)
我是VB项目的Project属性,您可以更改根命名空间。默认情况下,这与项目名称相同,但您可以将其删除,然后您可以在代码中充分利用命名空间结构。缺点是您必须在需要它的代码中将项目名称指定为命名空间...
对于C#项目,Project属性中的类似设置只是Default命名空间,如果在代码中指定了namespace,则会被覆盖。对于VB项目,它指定顶级命名空间,而不是默认....