2009-08-21 12 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#の違いの1つです。 – awe

+2

これは畏敬の念を抱いています:これは以下の答えです。 – Colin

答えて

13

この古い問題は修正されています。このバージョンからは、先頭の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

0

VB.NETで名前空間を設定することは、VB.NET構文だけでC#で名前空間を宣言することとほぼ同じです!残念ながら、ルート名前空間は常に存在するので、宣言された新しい名前空間はすべてルート名前空間内にあります。

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

+1

C#とは異なり、ConsoleApllication1.System.Textに追加されています。 もちろん、私はroot-namespaceをnullに設定できますが、これは私が望むものではありません。 – Shimmy

+1

さらに、私は 'Program'クラスが上記の例の' ConsoleApplication1.ConsoleApplication1'という名前空間に存在すると思います(私はvb.net環境で検証していません)。 –

5

私は悲しい真実はあなたができないことだと思います。名前空間はルート名前空間に追加されます。 The documentationは、エスケープするメカニズムのヒントを与えません。名前空間に関してGlobalキーワードを使用することについての注意がありますが、その部分を宣言するのではなく、名前空間を参照する方法を教える方法として解釈します。

1

この質問を見る:Possible to override VB.NET root namespace?

結論は、プロジェクトプロパティでデフォルトの名前空間を空のままにし、すべてのクラス/モジュール定義を名前空間ステートメントにラップすることです。

0

私はVBプロジェクトのプロジェクトプロパティを使用して、ルート名前空間を変更できます。これはプロジェクト名と同じデフォルトですが、削除することができます。次に、コード内に名前空間構造のフルパワーを持っています。欠点は、必要なコードのどこにでもネームスペースとしてプロジェクト名を指定する必要があることです。

C#プロジェクトの場合、Projectプロパティの同様の設定は、デフォルトの名前空間のみです。コード内に名前空間を指定します。 VBプロジェクトでは、デフォルトではなく、トップレベルの名前空間を指定しています。

関連する問題