Пространства имен предназначены для обеспечения возможности хранить один набор имен отдельно от друга. Имена классов объявленые в одном пространстве имен не будет конфликтовать с теми же именами класса, объявленными в другом.
Определение пространства имен начинается с ключевого слова 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 позволяет программе использовать имена в заданном пространстве имен. Например, мы используем пространство имен 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