Есть ли способ избежать пространства имен root в VB?

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: Проголосуйте.

Ответы

Ответ 1

В 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

Ответ 2

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

Ответ 3

Взгляните на этот вопрос: Можно ли переопределить корневое пространство имен VB.NET?.

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

Ответ 4

Установка пространства имен в VB.NET почти такая же, как объявление пространства имен в С#, только с синтаксисом 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


Приветствия для комментариев, ребята, размещали в памяти!

Ответ 5

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

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