Energy
education

сайт для тех, кто хочет изучать энергетику

22. Пространства имен

Пространства имен предназначены для обеспечения возможности хранить один набор имен отдельно от друга. Имена классов объявленые в одном пространстве имен не будет конфликтовать с теми же именами класса, объявленными в другом.

Определение пространства имен

Определение пространства имен начинается с ключевого слова namespace за которым следует его имя:

    
namespace namespace_name
{
   // код
}
    

Для вызова метода или переменной из другого пространства имен, перед их именем следует указать имя пространства имен:

    
namespace_name.item_name;
    

Следующая программа демонстрирует использование пространства имен:

    
using System;
namespace first_space
{
   class namespace_cl
   {
      public void func()
      {
         Console.WriteLine("Внутри first_space");
      }
   }
}
namespace second_space
{
   class namespace_cl
   {
      public void func()
      {
         Console.WriteLine("Внутри second_space");
      }
   }
}   
class TestClass
{
   static void Main(string[] args)
   {
      first_space.namespace_cl fc = new first_space.namespace_cl();
      second_space.namespace_cl sc = new second_space.namespace_cl();
      fc.func();
      sc.func();
      Console.ReadKey();
   }
}
    

Если приведенный выше код скомпилировать и выполнить, это приведет к следующему результату:

    
Внутри first_space
Внутри second_space
    

Ключевое слово using

Ключевое слово using позволяет программе использовать имена в заданном пространстве имен. Например, мы используем пространство имен System в нашей программе. Класс Console определяется там. Мы просто можем написать:

    
Console.WriteLine ("Привет");
    

Мы могли бы написать полное имя, как:

    
System.Console.WriteLine("Привет");
    

Вы также можете избежать записи пространств имен с использованием директивы using. Эта директива сообщает компилятору, что последующий код использует имена в указанном пространстве имен. Пространство имен, таким образом, подразумевается для следующего кода.

Давайте перепишем наш предыдущий пример, с помощью директивы:

    
using System;
using first_space;
using second_space;
namespace first_space
{
   class abc
   {
      public void func()
      {
         Console.WriteLine("Внутри first_space");
      }
   }
}
namespace second_space
{
   class efg
   {
      public void func()
      {
         Console.WriteLine("Внутри second_space");
      }
   }
}   
class TestClass
{
   static void Main(string[] args)
   {
      abc fc = new abc();
      efg sc = new efg();
      fc.func();
      sc.func();
      Console.ReadKey();
   }
}
    

Если приведенный выше код скомпилировать и выполнить, это приведет к следующему результату:

    
Внутри first_space
Внутри second_space
    

Вложенные пространства имен

Пространства имен могут быть вложенными, в которых можно задать одно пространство имен внутри другого пространства имен:

    
namespace namespace_name1 
{
   // код
   namespace namespace_name2 
   {
     // код
   }
}
    

Вы можете получить доступ к членам вложенного пространства имен с помощью точки оператора (.):

    
using System;
using first_space;
using first_space.second_space;
namespace first_space
{
   class abc
   {
      public void func()
      {
         Console.WriteLine("Внутри first_space");
      }
   }
   namespace second_space
   {
      class efg
      {
         public void func()
         {
            Console.WriteLine("Внутри second_space");
         }
      }
   }   
}
 
class TestClass
{
   static void Main(string[] args)
   {
      abc fc = new abc();
      efg sc = new efg();
      fc.func();
      sc.func();
      Console.ReadKey();
   }
}
    

Если приведенный выше код скомпилировать и выполнить, это приведет к следующему результату:

    
Внутри first_space
Внутри second_space