2009-08-21 3 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 при наличии корневого пространства имен в приложении, возможно ли это?Есть ли способ избежать пространства имен root в VB?

Обновление: Согласно ответам, я предполагаю, что этого не сделать. Я разместил предложение для Microsoft Connect: Please vote.

+1

Вы не можете сделать это, не удалив корневое пространство имен для приложения. Единственный способ добиться того, что вы хотите, - это удалить корневое пространство имен и явно задать пространство имен в коде. В проекте C# у вас нет корневого пространства имен, а только пространство имен по умолчанию, которое действительно вы запрашиваете здесь. Извините, это одна из отличий между VB.NET и C#. – awe

+2

на страх: это должен быть ответ ниже. – Colin

ответ

13

В VB.NET VS 2012 эта старая проблема исправлена. Начиная с этой версии вы можете избежать корневого пространства имен с ведущим 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 в значительной степени совпадает с объявлением пространства имен на 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

+1

Он добавляется в ConsoleApllication1.System.Text, в отличие от C#. Конечно, я могу задать для корневого пространства имен значение null, но это не то, что я хочу. – Shimmy

+1

Кроме того, я бы предположил, что класс 'Program' живет в пространстве имен' ConsoleApplication1.ConsoleApplication1' в приведенном выше примере (у меня нет окружения vb.net, чтобы проверить его). –

5

Я думаю, что печальная правда заключается в том, что вы не можете. Пространства имен добавляются к корневому пространству имен. The documentation не дает никаких намеков на какие-либо экранирующие механизмы. Существует примечание об использовании ключевого слова Global в отношении пространств имен, но я интерпретирую эту часть текста как определение того, как обращаться к пространствам имен, а не как объявлять их.

1

Посмотрите на этот вопрос: Possible to override VB.NET root namespace?.

Суть в том, что ваш единственный вариант - оставить пустое пространство имен по умолчанию в свойствах проекта и затем обернуть все определения вашего класса/модуля в операторах пространства имен.

0

I Свойства проекта проекта VB можно изменить корневое пространство имен. Это по умолчанию такое же, как имя проекта, но вы можете удалить его, а затем у вас есть полная структура структуры пространства имен в коде. Недостатком является то, что вы должны указывать имя проекта как пространство имен везде в коде, где вам это нужно ...

Для проектов C# аналогичная настройка в свойствах проекта - это только пространство имен по умолчанию, которое переопределяется, если вы указываете пространство имен в коде. Для проектов VB он указывает пространство имен верхнего уровня, а не значение по умолчанию ....

Смежные вопросы