Пространство имен — это контейнер для типов, определяющий область их видимости. Пространства имен предотвращают конфликты имен и используются для двух взаимосвязанных целей:
□ логического группирования элементов программы, расположенных в различных физических файлах;
□ группирования имен, предоставляемых сборкой в пользование другим модулям.
Во всех программах, созданных ранее, использовалось пространство имен, создаваемое по умолчанию. Реальные программы чаще всего разрабатываются группой программистов, каждый из которых работает со своим набором физических файлов (единиц компиляции), хранящих элементы создаваемого приложения. Если в разных файлах описать пространства имен с одним и тем же именем, то при построении приложения, состоящего из этих файлов, будет скомпоновано единое пространство имен.
В версию языка С# 2.0 введена возможность применять псевдоним пространства имен с помощью операции::, например:
using SIO = System.IO; // псевдоним пространства имен
|
|
using MIO = MyLibrary.IO; // псевдоним пространства имен
class Program
{
static void Main()
{
SIO::Stream s = new MIO::EmptyStream(); // использование псевдонимов
}
}
Использование псевдонима для пространства имен гарантирует, что последующие подключения других пространств имен к этой сборке не повлияют на существующие определения. Слева от операции:: можно указать идентификатор global. Он гарантирует, что поиск идентификатора, расположенного справа от операции, будет выполняться только в глобальном пространстве имен. Цель использования этого идентификатора та же: не допустить изменений существующих определений при разработке следующих версий программы, в которых в нее могут быть добавлены новые пространства имен, содержащие элементы с такими же именами.
Таким образом, сборки обеспечивают физическое группирование типов, а пространства имен — логическое. В мире сетевого программирования, когда про граммисту доступны десятки тысяч классов, пространства имен совершенно необходимы как для классификации и поиска, так и для предотвращения конфликтов имен типов.