// Класс для представления трехмерного шестиугольника.
public class Hexagon { }
}
// Square.cs
namespace My3DShapes
{
// Класс для представления трехмерного квадрата.
public class Square { }
}
Если теперь вы модифицируете операторы верхнего уровня, как показано ниже, то получите несколько ошибок на этапе компиляции, потому что в обоих пространствах имен определены одинаково именованные классы:
// Масса неоднозначностей!
using System;
using MyShapes;
using My3DShapes;
// На какое пространство имен производится ссылка?
Hexagon h = new Hexagon(); // Ошибка на этапе компиляции!
Circle c = new Circle(); // Ошибка на этапе компиляции!
Square s = new Square(); // Ошибка на этапе компиляции!
Устранить неоднозначности можно за счет применения полностью заданных имен:
// Теперь неоднозначности устранены.
My3DShapes.Hexagon h = new My3DShapes.Hexagon();
My3DShapes.Circle c = new My3DShapes.Circle();
MyShapes.Square s = new MyShapes.Square();
Разрешение конфликтов имен с помощью псевдонимов
Ключевое слово using
using System;
using MyShapes;
using My3DShapes;
// Устранить неоднозначность, используя специальный псевдоним.
using The3DHexagon = My3DShapes.Hexagon;
// На самом деле здесь создается экземпляр класса My3DShapes.Hexagon.
The3DHexagon h2 = new The3DHexagon();
...
Продемонстрированный альтернативный синтаксис using
System.Runtime.Serialization.Formatters.Binary, которое содержит член по имени BinaryFormatter. При желании экземпляр класса BinaryFormatter можно создать следующим образом:using bfHome = System.Runtime.Serialization.Formatters.Binary;
bfHome.BinaryFormatter b = new bfHome.BinaryFormatter();
...
либо с использованием традиционной директивы using
using System.Runtime.Serialization.Formatters.Binary;
BinaryFormatter b = new BinaryFormatter();
...
На данном этапе не нужно беспокоиться о предназначении класса BinaryFormatter
using в C# позволяет создавать псевдонимы для очень длинных полностью заданных имен или, как случается более часто, для разрешения конфликтов имен, которые могут возникать при импорте пространств имен, определяющих типы с идентичными названиями.На заметку!
Имейте в виду, что чрезмерное применение псевдонимов C# в результате может привести к получению запутанной кодовой базы. Если другие программисты в команде не знают о ваших специальных псевдонимах, то они могут полагать, что псевдонимы ссылаются на типы из библиотек базовых классов, и прийти в замешательство, не обнаружив их описания в документации.Создание вложенных пространств имен
При организации типов допускается определять пространства имен внутри других пространств имен. В библиотеках базовых классов подобное встречается во многих местах и обеспечивает размещение типов на более глубоких уровнях. Например, пространство имен IO
System, давая в итоге System.IO.Шаблоны проектов .NET Core помещают начальный код в файле Program.cs
CustomNamespaces: