Добавить в цитаты Настройки чтения

Страница 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 &gt; 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 &lt; 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 + &quot; &quot;);</b>

<b>    } while (i &gt; 0) ;</b>

<b>    Console.WriteLine();</b>

<b>    do {</b>

<b>      i = cu.Count();</b>

<b>      Console.Write(i + &quot; &quot;);</b>

<b>    } while(i &lt; 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(&quot;Конструирование класса ClassA&quot;);</b>

<b>    }</b>

<b>  }</b>

<b>  namespace NS2 { </b><b>// вложенное пространство имен </b>

<b>    class ClassB {</b>

<b>      public ClassB() {</b>

<b>        Console.WriteLine(&quot;Конструирование класса ClassB&quot;);</b>

<b>      }</b>

<b>    }</b>

<b>  }</b>