Пространство имён.
Пространство имён — некоторое множество каким-либо образом взаимосвязанных имён или терминов.
А что же происходит когда мы пишем: using System? Понятно что System это пространство имён, в котором хранятся множество классов, структур и типов и т.д. Но на физическом то уровне что происходит?
Это все равно что у тебя была онда квартира, ты говорил "у меня" и подразумевалось что в пределах одной квартиры, потом еще одну купил - расширил пространство, теперь "у меня завалялосб" означает что искать надо уже в 2-х квартирах.
А что же происходит когда мы пишем: using System? Понятно что System это пространство имён, в котором хранятся множество классов, структур и типов и т.д. Но на физическом то уровне что происходит?
Если под физическим уровнем ты имеешь в виду, какой исполняемый код сгенерирует компилятор, то никакой.
Пространства имен были придуманы для того, чтобы не возникало конфликтов в больших проектах. Т.е. если в проекте используются две библиотеки, в каждой из которых определена функция int foo(int), то при включении их заголовков в файл без использования пространств возник бы конфликт имен. Таким образом, пространства имен предназначены для того, чтобы явно указать компилятору, какое определение использовать и скрыть неиспользуемые. По умолчанию он ищет только в глобальном пространстве имен ::, а с помощью директивы using ты добавляешь имена в текущую область видимости(где искать имена). Почитай про области видимости и их разрешение.
Пространства имен НЕ порождают никакого кода на этапе выполнения, влияют только на компиляцию.
Вы заблуждаетесь, :: - это не глобальное пространство имен. Это квалификатор алиаса пространства имен. Алиас global закреплен за глобальным пространством имен.
С помощью этого квалификатора указываются совершенно точные имена, которые компилятор не ищет используя директивы using. Например, полностью квалифицированное имя стандартного знакового 32-битного целого будет таким:
Можно создавать и свои алиасы, действующие в рамках файла:
Использовать можно так:
или так:
В первом случае мы не оставляем компилятору сомнений насчет mysystem - это алиас пространства имен, во втором же случае он будет устанавливать смысл mysystem по контексту, так как использована точечная нотация.
Еще есть директива extern alias, но о ней в других сериях. :)
Просто мы, видимо, говорим о разных языках. Я писал о С++ т.к. не знаю C#, а вопрос ОПа вполне себе корректен в С++. В плюсах нет пространства global.
Цитирую Страуструпа:
Цитирую Страуструпа:
"using System" всетаки намекает нам на язык, используемый автором. ;)