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 { } 
} 

Wie mache ich das in VB, während ein Root-Namespace in der Anwendung, ist das möglich?Gibt es eine Möglichkeit, Root-Namespace in VB zu entkommen?

Update: Nach den Antworten gehe ich davon aus, dass es keine Möglichkeit gibt, dies zu tun. Ich habe einen Funktionsvorschlag an Microsoft Connect gesendet: Please vote.

+1

Sie können das nicht tun, ohne den Stammnamespace für die Anwendung zu entfernen. Der einzige Weg, um das zu erreichen, was Sie wollen, ist, den Root-Namespace zu entfernen und den Namespace explizit überall im Code festzulegen. In C# -Projekt haben Sie keinen Root-Namespace, nur den Standard-Namespace, was Sie hier wirklich fragen. Entschuldigung, das ist einer der Unterschiede zwischen VB.NET und C#. – awe

+2

zu Ehrfurcht: das sollte eine Antwort unter .. sein. – Colin

Antwort

13

In VB.NET von VS 2012 ist dieses alte Problem behoben. Ab dieser Version können Sie den Root-Namespace mit einem führenden global umgehen. Der folgende Code ist in VS 2010 fehlerhaft und in VS 2012 falsch:

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

Es war [mein Vorschlag auf connect] (https://connect.microsoft.com/VisualStudio/feedback/details/484455/allow-escaping-root-namespaces-in-vb), ich bin so stolz, es absolvierte !! – Shimmy

0

Das Festlegen eines Namespace in VB.NET entspricht ziemlich genau dem Deklarieren eines Namespace in C#, nur mit VB.NET-Syntax! Leider ist der Root-Namespace immer vorhanden und alle neu deklarierten Namespaces befinden sich im Root-Namespace.

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 

Der obige Code wird Ihnen die folgende geben, wenn das Stammnamespace Test ist.

Test.ConsoleApplication1
Test.System.Text


Beifall für die Kommentare Jungs, wurde auf das Gedächtnis Posting!

+1

Probieren Sie aus, was Sie geschrieben haben, dann gehen Sie in den Objektbrowser und nachschlagen. – Shimmy

+1

Es wird ConsoleApllication1.System.Text im Gegensatz zu C# hinzugefügt. Natürlich kann ich den Root-Namespace auf null setzen, aber das ist nicht was ich will. – Shimmy

+1

Außerdem würde ich vermuten, dass die 'Program' Klasse im Namespace' ConsoleApplication1.ConsoleApplication1' im obigen Beispiel lebt (ich habe jedoch keine vb.net Umgebung um dies zu verifizieren). –

5

Ich denke, dass die traurige Wahrheit ist, dass Sie nicht können. Die Namespaces werden an den Root-Namespace angehängt. gibt keinen Hinweis auf austretende Mechanismen. Es gibt eine Notiz über die Verwendung des Schlüsselwortes Global in Bezug auf Namespaces, aber ich interpretiere diesen Teil des Textes als wie man auf Namespaces verweist und nicht wie man sie deklariert.

1

Werfen Sie einen Blick auf diese Frage: Possible to override VB.NET root namespace?.

Im Endeffekt ist Ihre einzige Option, den Standardnamespace leer in den Projekteigenschaften zu belassen und dann alle Ihre Klassen-/Moduldefinitionen in Namespace-Anweisungen umzubrechen.

0

I die Projekteigenschaften eines VB-Projekts können Sie den Root-Namespace ändern. Dies ist standardmäßig derselbe wie der Projektname, Sie können ihn jedoch entfernen und haben dann die volle Namespace-Struktur im Code. Der Nachteil ist, dass Sie den Projektnamen als Namespace überall im Code angeben müssen, wo Sie ihn benötigen ...

Für C# -Projekte ist die ähnliche Einstellung in den Projekteigenschaften nur der Default-Namespace, der überschrieben wird, wenn Sie geben den Namespace im Code an. Für VB-Projekte gibt es den Top-Level-Namespace, nicht den Standard ....

Verwandte Themen