Visual Basic и проблема пространства имен - PullRequest
1 голос
/ 17 декабря 2009

Я чистил решение Visual Basic (.NET 2.0). Разделив его на два проекта. 150 классов имеют пространство имен RebateCalculator в верхней части файла. Эти файлы теперь находятся в Project с пространством имен по умолчанию RebateCalculator. Если бы я вставил файл Class1.cs, а затем объявил пространство имен, которое есть во всех моих других файлах, - тогда полное имя класса было бы RebateCalculator.RebateCalculator.Class1

Есть ли что-то, что я могу прикрепить к началу объявления пространства имен, чтобы сделать его абсолютным? вместо того, чтобы повторяться? Я предпочел бы найти такое решение вместо удаления объявления пространства имен (в случае, если файлы снова будут перемещены)

Конечная цель: иметь возможность выполнить поиск / замену в 'Namespace RebateCalculator', чтобы исправить проблему в 150 файлах.

Ответы [ 2 ]

6 голосов
/ 18 декабря 2009

Не знаю, отвечает ли это на ваш вопрос, но на всякий случай ...

Откройте Свойства проекта и нажмите Свойства приложения. ОЧИСТИТЕ там корневое пространство имен. Тогда ваше объявление пространства имен в каждом файле будет «абсолютным».

Кстати ... это очень вероятно сломает ваше приложение и может занять некоторое время, чтобы все исправить. Обязательно сделайте резервную копию (или, по крайней мере, зафиксируйте репо) перед началом

В сторону. Я думаю, что объединение корневого пространства имен Project с объявленным пространством имен сбивает с толку. Я обычно делаю одно или другое.

Сет

5 голосов
/ 17 декабря 2009

Дублированный ответ, который вы опубликовали, ссылается на проблему.

VB.Net имеет концепцию "корневого пространства имен". Когда вы добавляете оператор пространства имен в файл кода, указанное имя объединяется с корневым пространством имен, чтобы сформировать полное пространство имен.

Итак, если в VB.Net ваше корневое пространство имен - MyRoot, а затем вы создаете класс и окружаете пространство имен MyNamespace, то полное имя класса - MyRoot.MyNamespace.ClassName. Если вы не используете оператор Namespace, то полное имя класса - MyRoot.ClassName. Другими словами, настройка корневого пространства имен вносит вклад в имя пространства имен.

В C # это не так. C # имеет «пространство имен по умолчанию». Это просто определение пространства имен, которое автоматически добавляется в новые классы при их создании. Если вы удалите объявление пространства имен, то у класса не будет пространства имен. Другими словами, настройка пространства имен по умолчанию фактически не влияет на имя пространства имен.

В C # все, что указано в объявлении пространства имен, является используемым пространством имен. Параметр пространства имен по умолчанию определяет только то, что по умолчанию вставляется в файл кода.

Возьмем эту программу VB, в которой для корневого пространства имен задано значение «TestVBConsole», а в классе нет оператора пространства имен:

Module Module1
    Sub Main()
        Dim tc As New TestClass

        Console.WriteLine(tc.GetType().FullName)

    End Sub
End Module

и этот класс

Public Class TestClass
    Public aField As String = "Default"
End Class

Выход

TestVBConsole.TestClass

Та же программа на выходах C #

TestClass

Что касается вашего вопроса, я не думаю, что есть какой-либо способ изменить это поведение. Вам просто нужно помнить в C #, чтобы убедиться, что ваши объявления пространства имен верны.

...