В эту версию программы внесены два существенных изменения. Первое из них состоит в применении директивы using
в самом начале программы, как показано ниже.
using Counter;
Благодаря этому становится видимым пространство имен Counter. Второе изменение состоит в том, что класс CountDown
больше не нужно дополнительно определять с помощью пространства имен Counter, как демонстрирует приведенная ниже строка кода из метода Main()
.
CountDown cd1 = new CountDown(10);
Теперь пространство имен Counter становится видимым, и поэтому класс CountDown
может быть использован непосредственно.
Рассматриваемая здесь программа иллюстрирует еще одно важное обстоятельство: применение одного пространства имен не отменяет действие другого. Когда пространство имен делается видимым, это просто дает возможность использовать его содержимое без дополнительного определения имен. Следовательно, в данном примере оба пространства имен, System
и Counter
, становятся видимыми.
Вторая форма директивы using
позволяет определить еще одно имя (так называемый
using псевдоним = имя;
где
Ниже приведен вариант программы из предыдущего примера, измененный с целью показать создание и применение псевдонима MyCounter
вместо составного имени Counter.CountDown
.
// Продемонстрировать применение псевдонима,
using System;
// Cоздать псевдоним для составного имени
Counter.CountDown.
using MyCounter = Counter.CountDown;
// Объявить пространство имен для счетчиков,
namespace Counter {
// Простой вычитающий счетчик,
class CountDown {
int val;
public CountDown(int n) {
val = n;
}
public void Reset(int n) {
val = n;
}
public int Count() {
if(val > 0) return val --;
else return 0;
}
}
}
class NSDemo4 {
static void Main() {
// Здесь и далее псевдоним MyCounter используется
// вместо составного имени Counter.CountDown.
MyCounter cd1 = new MyCounter(10);
int i;
do {
i = cd1.Count() ;
Console.Write(i + " ");
} while (i > 0);
Console.WriteLine() ;
MyCounter cd2 = new MyCounter(20);
do {
i = cd2.Count();
Console.Write (i + " ");
} while (i > 0);
Console.WriteLine();
cd2.Reset (4);
do {
i = cd2.Count();
Console.Write (i + " ");
} while (i > 0);
Console.WriteLine();
}
}
Псевдоним MyCounter
создается с помощью следующего оператора.
using MyCounter = Counter.CountDown;
После того как псевдоним будет определен в качестве другого имени класса Counter.CountDown
, его можно использовать для объявления объектов без дополнительного определения имени данного класса. Например, в следующей строке кода из рассматриваемой здесь программы создается объект класса CountDown
.
MyCounter cd1 = new MyCounter (10);
П04 одним именем можно объявить несколько пространств имен. Это дает возможность распределить пространство имен по нескольким файлам или даже разделить его в пределах одного и того же файла исходного кода. Например, в приведенной ниже программе два пространства имен определяются под одним и тем же именем Counter
. Одно из них содержит класс CountDown
, а другое — класс CountUp
. Во время компиляции содержимое обоих пространств имен Counter
складывается.
// Аддитивный характер пространств имен,
using System;
// Сделать видимым пространство имен Counter,
using Counter;
// Это одно пространство имен Counter.
namespace Counter {
// Простой вычитающий счетчик,
class CountDown {
int val;
public CountDown(int n) {
val = n;
}