Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«C# 4.0: ΠΏΠΎΠ»Π½ΠΎΠ΅ руководство». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 139

Автор Π“Π΅Ρ€Π±Π΅Ρ€Ρ‚ Π¨ΠΈΠ»Π΄Ρ‚

    cd2.Reset(4);

    do {

      i = cd2.Count();

      Console.Write(i + " ");

    } while (i > 0);

    Console.WriteLine();

  }

}


Π’ эту Π²Π΅Ρ€ΡΠΈΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ внСсСны Π΄Π²Π° сущСствСнных измСнСния. ΠŸΠ΅Ρ€Π²ΠΎΠ΅ ΠΈΠ· Π½ΠΈΡ… состоит Π² ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ using Π² самом Π½Π°Ρ‡Π°Π»Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅.


using Counter;


Благодаря этому становится Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΌ пространство ΠΈΠΌΠ΅Π½ Counter. Π’Ρ‚ΠΎΡ€ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ класс CountDown большС Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ пространства ΠΈΠΌΠ΅Π½ Counter, ΠΊΠ°ΠΊ дСмонстрируСт привСдСнная Π½ΠΈΠΆΠ΅ строка ΠΊΠΎΠ΄Π° ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Main().


CountDown cd1 = new CountDown(10);


Π’Π΅ΠΏΠ΅Ρ€ΡŒ пространство ΠΈΠΌΠ΅Π½ Counter становится Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΌ, ΠΈ поэтому класс CountDown ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использован нСпосрСдствСнно.

РассматриваСмая здСсь ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ Π²Π°ΠΆΠ½ΠΎΠ΅ ΠΎΠ±ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ: ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ пространства ΠΈΠΌΠ΅Π½ Π½Π΅ отмСняСт дСйствиС Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ. Когда пространство ΠΈΠΌΠ΅Π½ дСлаСтся Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΌ, это просто Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ содСрТимоС Π±Π΅Π· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ опрСдСлСния ΠΈΠΌΠ΅Π½. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΎΠ±Π° пространства ΠΈΠΌΠ΅Π½, System ΠΈ Counter, становятся Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΌΠΈ.


Вторая Ρ„ΠΎΡ€ΠΌΠ° Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ using

Вторая Ρ„ΠΎΡ€ΠΌΠ° Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ 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;

    }

    public void Reset(int n) {

      val = n;

    }

    public int Count() {

      if(val > 0) return val--;

      else return 0;

    }

  }

}


//А это Π΄Ρ€ΡƒΠ³ΠΎΠ΅ пространство ΠΈΠΌΠ΅Π½ Counter,

namespace Counter {

  // ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ ΡΡƒΠΌΠΌΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ счСтчик,

  class CountUp {

    int val;

    int target;

    public int Target {

      get{

        return target;

      }

    }

    public CountUp(int n) {

      target = n;

      val = 0;

    }

    public void Reset(int n) {

      target = n; val = 0;

    }

    public int Count() {

      if(val < target) return val++;

      else return target;

    }

  }

}


class NSDemo5 {

  static void Main() {

    CountDown cd = new CountDown(10);

    CountUp cu = new CountUp(8);

    int i;

    do {

      i = cd.Count();

      Console.Write (i + " ");

    } while (i > 0) ;

    Console.WriteLine();

    do {

      i = cu.Count();

      Console.Write(i + " ");

    } while(i < cu.Target);

  }

}


Π’ΠΎΡ‚ ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρƒ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.


10 9 8 7 6 5 4 3 2 1 0

0 1 2 3 4 5 6 7 8


ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π°


using Counter;


Π΄Π΅Π»Π°Π΅Ρ‚ Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΌ всС содСрТимоС пространства ΠΈΠΌΠ΅Π½ Counter. Π­Ρ‚ΠΎ Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ классам CountDown ΠΈ CountUp нСпосрСдствСнно, Ρ‚.Π΅. Π±Π΅Π· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ указания пространства ΠΈΠΌΠ΅Π½. ΠŸΡ€ΠΈ этом Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ пространства ΠΈΠΌΠ΅Π½ Counter Π½Π° Π΄Π²Π΅ части Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ значСния.


Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ пространства ΠΈΠΌΠ΅Π½

Одно пространство ΠΈΠΌΠ΅Π½ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½ΠΎ Π² Π΄Ρ€ΡƒΠ³ΠΎΠ΅. Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ.


// Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ пространства ΠΈΠΌΠ΅Π½.

using System;

namespace NS1 {

  class ClassA {

    public ClassA() {

      Console.WriteLine("ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ класса ClassA");

    }

  }

  namespace NS2 { // Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ΅ пространство ΠΈΠΌΠ΅Π½

    class ClassB {

      public ClassB() {

        Console.WriteLine("ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ класса ClassB");

      }

    }