Страница 244 из 502
<b>// Аддитивный характер пространств имен,</b>
<b>using System;</b>
<b>// Сделать видимым пространство имен Counter,</b>
<b>using Counter;</b>
<b>// Это одно пространство имен Counter.</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) return val--;</b>
<b> else return 0;</b>
<b> }</b>
<b> }</b>
<b>}</b>
<b>//А это другое пространство имен Counter,</b>
<b>namespace Counter {</b>
<b> // Простой суммирующий счетчик,</b>
<b> class CountUp {</b>
<b> int val;</b>
<b> int target;</b>
<b> public int Target {</b>
<b> get{</b>
<b> return target;</b>
<b> }</b>
<b> }</b>
<b> public CountUp(int n) {</b>
<b> target = n;</b>
<b> val = 0;</b>
<b> }</b>
<b> public void Reset(int n) {</b>
<b> target = n; val = 0;</b>
<b> }</b>
<b> public int Count() {</b>
<b> if(val < target) return val++;</b>
<b> else return target;</b>
<b> }</b>
<b> }</b>
<b>}</b>
<b>class NSDemo5 {</b>
<b> static void Main() {</b>
<b> CountDown cd = new CountDown(10);</b>
<b> CountUp cu = new CountUp(8);</b>
<b> int i;</b>
<b> do {</b>
<b> i = cd.Count();</b>
<b> Console.Write (i + " ");</b>
<b> } while (i > 0) ;</b>
<b> Console.WriteLine();</b>
<b> do {</b>
<b> i = cu.Count();</b>
<b> Console.Write(i + " ");</b>
<b> } while(i < cu.Target);</b>
<b> }</b>
<b>}</b>
Вот к какому результату приводит выполнение этой программы.
<b>10 9 8 7 6 5 4 3 2 1 0</b>
<b>0 1 2 3 4 5 6 7 8</b>
Обратите также внимание на то, что директива
<b>using Counter;</b>
делает видимым все содержимое пространства имен Counter. Это дает возможность обращаться к классам CountDown и CountUp непосредственно, т.е. без дополнительного указания пространства имен. При этом разделение пространства имен Counter на две части не имеет никакого значения.
Одно пространство имен может быть вложено в другое. В качестве примера рассмотрим следующую программу.
<b>// Вложенные пространства имен.</b>
<b>using System;</b>
<b>namespace NS1 {</b>
<b> class ClassA {</b>
<b> public ClassA() {</b>
<b> Console.WriteLine("Конструирование класса ClassA");</b>
<b> }</b>
<b> }</b>
<b> namespace NS2 { </b><b>// вложенное пространство имен </b>
<b> class ClassB {</b>
<b> public ClassB() {</b>
<b> Console.WriteLine("Конструирование класса ClassB");</b>
<b> }</b>
<b> }</b>
<b> }</b>