Пространства имен в C#

C#   6 февраля 2012  Автор статьи:  

Пространства имен предназначены для объединения родственных типов в логические группы, это помогает быстрее находить разработчику нужный тип. Для примера рассмотрим пространство имен System.Text, там созданы типы для обработки строк.
Рассмотрим пример с объявлением объекта, который имеет тип StringBuilder и находится в пространстве имен System.Text.

namespace ConsoleApplication2
{
class Program
{

static void Main(string[] args)
{
System.Text.StringBuilder sb= new System.Text.StringBuilder();

}
}
}

Как мы видим объявление данного типа довольно громоздко и, если программисту приходится часто объявлять переменные данного типа, то это отнимает очень много времени. К счастью в C# придумана специальная директива using, которая помогает избежать этой многословности.
[cc lang=»csharp»]
using System.Text;

namespace ConsoleApplication2
{
class Program
{

static void Main(string[] args)
{
StringBuilder strb= new StringBuilder();

}
}
}
[/cc]
Как мы видим, данные код гораздо более компактен, но при этом имеет такую же функциональность. Для компилятора пространство имен – это просто способ расширить имя типа, тем самым сделав его уникальным за счет добавления к началу групп символов, разделенных точкой. Таким образом, при запуске приложения компилятор интерпретирует строку StringBuilder в System.Text.StringBuilder.
Но наверное вы уже догадались, что при таком подходе могут возникать проблемы связанные с тем, что два пространства имен имеющие одинаковые названия могут находиться в разных сборках. Допустим компании Microsoft и Sun создали две разные сборки, в которых имеется тип bigreal. Тогда рассмотрим следующий код.
[cc lang=»csharp»]
using Microsoft;
using Sun;

namespace ConsoleApplication2
{
class Program
{

static void Main(string[] args)
{
bigreal dr = new bigreal();
}
}
}
[/cc]
Но при такой реализации компилятор выдаст ошибку, так как ссылка на bigreal неоднозначна. Существует два наиболее популярных решения данной проблемы. Во-первых, вы можете использовать полное имя при объявлении.
[cc lang=»csharp»]
using Microsoft;
using Sun;

namespace ConsoleApplication2
{
class Program
{

static void Main(string[] args)
{
Microsoft.bigreal dr = new Microsoft.bigreal();
}
}
}
[/cc]
В данном случае объявление переменной вполне корректно.
Во-вторых, в C# существует специальная форма директивы using, позволяющая создавать псевдонимы для типов или пространств имен. Это очень удобно, когда нужно использовать лишь несколько типов из пространства имен, но не хочется смешивать все используемые типы.
[cc lang=»csharp»]
using Microsoft;
using Sun;
using MicrosoftBigreal = Microsoft.bigreal;
namespace ConsoleApplication2
{
class Program
{

static void Main(string[] args)
{
MicrosoftBigreal dr = new MicrosoftBigreal();
}
}
}
[/cc]
Данный код, так же является корректным.

Научиться программировать

  • на Delphi

  • на Java

  • на C++