Страница 242 из 502
<b> static void Main() {</b>
<b> // Это класс CountDown из пространства имен Counter.</b>
<b> Counter.CountDown cd1 = new Counter.CountDown(10);</b>
<b> // Это класс CountDown из пространства имен Counter2.</b>
<b> Counter2.CountDown cd2 = new Counter2.CountDown();</b>
<b> int i;</b>
<b> do {</b>
<b> i = cd1.Count();</b>
<b> Console.Write(i + " ");</b>
<b> } while(i > 0);</b>
<b> Console.WriteLine();</b>
<b> cd2.Count();</b>
<b> }</b>
<b>}</b>
Вот к какому результату приводит выполнение этой программы.
<b>10 9 8 7 6 5 4 3 2 1 0</b>
<b>Это метод Count() из пространства имен Counter2.</b>
Как следует из приведенного выше результата, класс CountDown из пространства имен Counter существует отдельно от класса того же названия из пространства имен Counter2, и поэтому конфликт имен не возникает. Несмотря на всю простоту данного примера, он наглядно показывает, как удается избежать конфликта имен в собственном коде и коде, написанном другими разработчиками, поместив классы с одинаковыми именами в разные пространства имен.
Если в программе присутствуют частые ссылки на члены конкретного пространства имен, то указывать это пространство всякий раз, когда требуется ссылка на него, не очень удобно. Преодолеть это затруднение помогает директива using. В подавляющем большинстве приводившихся ранее примеров программ с помощью этой директивы делалось видимым глобальное для C# пространство имен System, поэтому она отчасти вам уже знакома. Как и следовало ожидать, с помощью директивы using можно сделать видимыми вновь создаваемые пространства имен.
Существуют две формы директивы using. Ниже приведена первая из них:
<b>using имя;</b>
где имя обозначает имя того пространства имен, к которому требуется получить доступ. Все члены, определенные в указанном пространстве имен, становятся видимыми, и поэтому могут быть использованы без дополнительного определения их имен. Директиву using необходимо вводить в самом начале каждого файла исходного кода перед любыми другими объявлениями или же в начале тела пространства имен.
Приведенная ниже программа является вариантом предыдущего примера, переработанным с целью продемонстрировать применение директивы using, делающей видимым создаваемое пространство имён.
<b>// Продемонстрировать применение директивы using, </b>
<b>using System;</b>
<b>// Сделать видимым пространство имен Counter, </b>
<b>using Counter;</b>
<b>// Объявить пространство имен для счетчиков, </b>
<b>namespace Counter {</b>
<b> // Простой вычитающий счетчик, </b>
<b> class CountDown {</b>
<b> int val;</b>
<b> public CountDown(int n) {</b>
<b> val = n;</b>
<b> }</b>
<b> public void Reset(int n) {</b>
<b> val = n;</b>
<b> }</b>
<b> public int Count() {</b>
<b> if(val > 0)</b>
<b> return val--;</b>
<b> else return 0;</b>
<b> }</b>
<b> }</b>
<b>}</b>
<b>class NSDemo3 {</b>
<b> static void Main() {</b>
<b> // Теперь класс CountDown может быть использован непосредственно.</b>
<b> CountDown cd1 = new CountDown(10);</b>
<b> int i;</b>
<b> do {</b>
<b> i = cd1.Count();</b>
<b> Console.Write (i + " ") ;</b>
<b> } while (i > 0);</b>
<b> Console.WriteLine();</b>
<b> CountDown cd2 = new CountDown (20);</b>
<b> do {</b>
<b> i = cd2.Count();</b>
<b> Console.Write(i + " ");</b>
<b> } while (i > 0);</b>
<b> Console.WriteLine();</b>
<b> cd2.Reset(4);</b>
<b> do {</b>
<b> i = cd2.Count();</b>
<b> Console.Write(i + " ");</b>
<b> } while (i > 0);</b>
<b> Console.WriteLine();</b>
<b> }</b>
<b>}</b>