Speak.Me Учить иностранные слова

C#: пространства имен

Пространство имен — это область, в пределах которой названия типов должны быть уникальны. Обычно типы организуются в иерархические пространства имен с целью избежать конфликта названий и чтобы названия типов было легко найти. Пространство имен — неотъемлемая часть названия типа.

Пространства имен никак не зависят от сборок и от модификаторов доступа (public, internal, private и т.д.).

Ключевое слово namespace задает пространство имен для всех типов в следующем после ключевого слова блоке:

Точки в пространстве имен используются для обозначения иерархии вложенных пространств имен. Ссылаться на тип следует используя его полное уточненное (квалифицированное ) имя (fully qualified name), которое включает все пространства имен от внешнего до внутреннего.

Типы, не включенные ни в одно пространство имен, считаются расположенными в глобальном пространстве имен (global namespace). Глобальное пространство имен также включает пространства имен верхнего уровня.

Директива using

Директива using импортирует пространство имен и делает возможным ссылаться на типы без использования их полных уточненных имен.

Директива using может быть вложена в пространство имен, что ограничит область ее видимости.

Область видимости имен

Имена (названия типов) объявленные во внешнем пространстве имен могут использоваться во внутреннем пространстве без указания полного уточненного имени.

Если необходимо сослаться на другую ветвь в иерархии пространств имен, нужно использовать частично уточненное имя (partially qualified name).

Сокрытие имен

Если внутреннее и внешнее пространства имен содержат объявление типов с одинаковыми именами, то при использовании во внутреннем пространстве имен предпочтение будет отдано внутреннему типу. Чтобы сослаться на тип из внешнего пространства, необходимо использовать полное уточненное имя.

Повторение пространств имен

Объявление пространств имен могут повторяться, но имена типов, объявленных внутри них, не должны конфликтовать.

Приставка global::

Иногда полные уточненные имена могут конфликтовать с внутренними именами. В этом случае, чтобы сослаться на тип с полным уточненным именем, нужно использовать приставку global::.

Псевдонимы типов и пространств имен

Импортирование пространств имен может привести к противоречию названий типов. Поэтому вместо импортирования пространства имен полностью, можно импортировать отдельные содержащиеся в нем типы, присвоив им псевдонимы.

Также псевдонимы можно присваивать и самим пространствам имен.