Некоторые важные аспекты данной программы заслуживают более пристального внимания. Во-первых, при создании объекта классаCountDownнеобходимо дополнительно определить его имя с помощью пространства именCounter,как показано ниже. Ведь классCountDownобъявлен в пространстве именCounter.
Counter.CountDown cdl = new Counter.CountDown(10);
Это правило можно обобщить: всякий раз, когда используется член пространства имен, его имя необходимо дополнительно определить с помощью этого пространства имен. В противном случае член пространства имен не будет обнаружен компилятором.
Во-вторых, как только объект типаCounterбудет создан, дополнительно определять его члены с помощью пространства имен уже не придется. Следовательно, методcdl. Count может быть вызван непосредственно без дополнительного указания пространства имен, как в приведенной ниже строке кода.
i = cdl.Count;
И в-третьих, ради наглядности примера рассматриваемая здесь программа была разделена на два отдельных файла. В одном файле содержится код объявления пространства именCounter,а в другом — код самой программыNSDemo.Но оба фрагмента кода можно было бы объединить в единый файл. Более того, в одном файле исходного кода может содержаться два или более пространства имен со своими собственными областями объявлений. Когда оканчивается действие внутреннего пространства имен, возобновляется действие внешнего пространства имен — в примере сCounterэто глобальное пространство имен. Ради большей ясности в последующих примерах все пространства имен, требующиеся в программе, будут представлены в одном и том же файле. Следует, однако, иметь в виду, что их допускается распределять по отдельным файлам, что практикуется чаще в выходном коде.
Предотвращение конфликтов имен с помощью пространств имен
Главное преимущество пространств имен заключается в том, что объявленные в них имена не вступают в конфликт с именами, объявленными за их пределами. Например, в приведенной ниже программе определяются два пространства имен. Первым из них является представленное ранее пространство именCounter,а вторым —Counter2.Оба пространства имен содержат классы с одинаковым именемCountDown,но поскольку это разные пространства, то оба классаCountDownне вступают в конфликт друг с другом. Кроме того, оба пространства имен определены в одном и том же файле. Как пояснялось выше, это вполне допустимо. Безусловно, каждое из этих пространств имен можно было бы выделить в отдельный файл, если бы в этом возникла потребность.
// Пространства имен предотвращают конфликты имен.