vb.net Конфликт пространства имен системы с родным пространством имен - PullRequest
1 голос
/ 16 ноября 2011

В моем решении есть класс EventArgs(Of T).
Этот класс находится в пространстве имен Acme.Infrastructure.Interface.
Класс с таким же именем EventArgs существует в пространстве имен System.

В другом проекте моего решения у меня есть класс Acme.BusinessModules.MyModule.MyClass
При попытке использовать класс EventArgs я должен полностью указать имя класса, или компилятор считает, что я использую System.EventArgsclass.

Мое понимание разрешения пространства имен заключалось в том, что компилятор сначала будет искать класс в текущем пространстве имен, а затем его родителей.Похоже, что компилятор проверяет System, прежде чем проверяет пространства имен родного брата.

Правильно ли, что System проверяется перед родным братом?Или это поведение вызвано другими проблемами (порядок импорта?)?

1 Ответ

0 голосов
/ 16 ноября 2011

Посмотрите на используемые пространства имен:

  • Acme.BusinessModules.MyModule
  • Acme.Infrastructure.Interface

Нет причин, по которым компилятор будет выглядеть в Acme.Infrastructure.Interface при компиляции класса в Acme.BusinessModules.MyModule. Теперь, если код, который вы писали, был (скажем) Acme.Infrastructure.Interface.SomethingElse, тогда это было бы другое дело - но здесь похоже, что компилятор делает абсолютно правильные вещи. Тот факт, что оба пространства имен начинаются с Acme, отсутствует ни здесь, ни там.

Как ты сам сказал:

Мое понимание разрешения пространства имен заключалось в том, что компилятор сначала будет искать класс в текущем пространстве имен, а затем его родителей.

Пространства имен предков здесь Acme.BusinessModules и Acme - , а не Acme.Infrastructure.Interface.

Я бы также настоятельно посоветовал вам , а не для создания имен классов, которые конфликтуют с именами в System. Это действительно просто напрашивается на неприятности.

...