Определение пространств имен в C#

Синтаксис объявления пространства имен прост. В следующем коде демонстрируется объявление пространства имен Acme:

1
2
3
4
namespace Acme
{
class Utility {}
}

Пространства имен не обязательно должны ограничиваться единственной единицей компиляции (т.е. файлом исходного кода С#). Другими словами, одно и то же объявление пространства имен может существовать во многих файлах С#. Когда все скомпилировано, набор идентификаторов, включенных в пространство имен, является объединением всех идентификаторов в каждом из объявлений этого пространства имен.

Фактически это объединение пересекает границы сборок. Если несколько сборок содержат типы, определенные в одном и том же пространстве имен, то общее пространство имен состоит из всех идентификаторов во всех сборках, определяющих эти типы.

Объявления пространств имен можно вкладывать друг в друга. Это можно делать одним из двух способов. Первый способ очевиден:

1
2
3
4
5
6
namespace Acme
{
namespace Utilities
{
class SomeUtility {}
}

В таком случае для доступа к классу SomeUtility должно использоваться его полное имя, т.е. Acme .Utilities. SomeUtility. Ниже показан альтернативный способ определения вложенных пространств имен:

1
2
3
4
5
6
7
namespace Acme
{
}
namespace Acme.Utilities
{
class SomeUtility {}
}

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

Любые типы, которые объявляются вне пространства имен, становятся частью глобального пространства имен.

Определения типов в глобальном пространстве имен всегда следует избегать. Такая практика известна как “засорение глобального пространства имен” и считается дурным тоном в программировании. Это должно быть очевидным, поскольку в данном случае нет возможности защитить типы, определенные в разных местах, от потенциальных конфликтов имен.

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100