2009-08-21 91 views
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中執行此操作,同時在應用程序中有根名稱空間,這可能嗎?有沒有辦法在VB中轉義根名稱空間?

更新: 根據答案,我認爲沒有辦法做到這一點。 我向Microsoft Connect發佈了一項功能建議:Please vote

+1

如果不刪除應用程序的根名稱空間,則無法執行此操作。實現你想要的唯一方法是刪除根名稱空間,並在代碼中的任何地方明確地設置名稱空間。在C#項目中,您沒有根名稱空間,只有默認名稱空間,這實際上就是您要求的。對不起,這是VB.NET和C#之間的區別之一。 – awe 2009-08-21 11:25:53

+2

敬畏:這應該是下面的答案.. – Colin 2009-08-21 11:28:39

回答

13

在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

這是[我的連接建議](https://connect.microsoft.com/VisualStudio/feedback/details/484455/allow-escaping-root-namespaces-in-vb),我很自豪它畢業了! – Shimmy 2013-06-28 08:30:45

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


乾杯的評論傢伙,被張貼在內存!

+1

嘗試一下你寫的東西,然後進入對象瀏覽器並查找它。 – Shimmy 2009-08-21 10:24:36

+1

與C#不同,它被添加到ConsoleApllication1.System.Text中。 當然,我可以將根名稱空間設置爲null,但不是這是我想要的。 – Shimmy 2009-08-21 10:27:25

+1

此外,我猜想'Program'類存在於上例中的命名空間'ConsoleApplication1.ConsoleApplication1'中(我沒有一個vb.net環境來驗證它)。 – 2009-08-21 10:32:59

5

我認爲可悲的事實是你不能。名稱空間被追加到根名稱空間。 The documentation沒有提供任何逃避機制的暗示。有關於使用與名稱空間相關的Global關鍵字的說明,但我將該部分解釋爲討論如何引用名稱空間而不是如何聲明它們。

1

看一看這個問題:Possible to override VB.NET root namespace?

底線是您唯一的選擇是在項目屬性中保留默認命名空間爲空,然後將所有類/模塊定義包裝在命名空間語句中。

0

我是一個VB項目的項目屬性,你可以改變根名稱空間。這與項目名稱默認相同,但可以將其刪除,然後在代碼中擁有完整的命名空間結構。缺點是你必須指定項目名稱作爲命名空間無處不在的代碼,你需要它...

對於C#項目,在項目屬性中的類似設置,只有默認的命名空間,這是重寫如果您在代碼中指定命名空間。對於VB項目,它指定頂級命名空間,而不是默認的....

相關問題