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

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

<b>    } while(i &gt; 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 &gt; 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 + &quot; &quot;) ;</b>

<b>    } while (i &gt; 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 + &quot; &quot;);</b>

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

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

<b>    cd2.Reset(4);</b>

<b>    do {</b>

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

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

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

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

<b>  }</b>

<b>}</b>