Ключевое слово C# using можно также использовать для создания псевдонимов абсолютных имен типов. После создания псевдонима вы получаете возможность использовать его как ярлык, который будет заменен полным именем типа во время компиляции. Например:
using System;
using MyShapes;
using My3DShapes;
// Ликвидация неоднозначности с помощью псевдонима.
using The3DHexagon = My3DShapes.Hexagon;
namespace MyApp {
class ShapeTester {
static void Main(string[] args) {
// На самом деле здесь создается тип My3DShapes.Hexagon.
The3DHexagon h2 = new The3DHexagon();
…
}
}
}
Этот альтернативный синтаксис using можно использовать и при создании псевдонимов для длинных названий пространств имен.
Одним из длинных названий в библиотеке базовых классов является System.Runtime.Serialization.Formatters.Binary. Это пространство имен содержит член с именем BinaryFormatter. Используя синтаксис using, экземпляр BinaryFormatter можно создать так, как показано ниже:
using MyAlias = System.Runtime.Serialization.Formatters.Binary;
namespace MyApp {
class ShapeTester {
static void Main(string[] args) {
MyAlias.BinaryFormatter b = new MyAlias.BinaryFormatter();
}
}
}
или же с помощью традиционного варианта использования директивы using.
using System.Runtime.Serialization.Formatters.Binary;
namespace MyApp {
class ShapeTester {
static void Main(string [] args) {
BinaryFormatter b
}
}
}
Замечание. Теперь в C# предлагается и механизм разрешения конфликтов для одинаково названных
Вложенные пространства имен
Совершенствуя организацию своих типов, вы имеете возможность определить пространства имен в рамках других пространств имен. Библиотеки базовых классов .NET часто используют такие вложений, чтобы обеспечить более высокий уровень организации типа. Например, пространство имен Collections вложено в System, чтобы в результате получилась System.Collections. Чтобы создать корневое пространство имен, содержащее уже существующее пространство имен My3DShapes, можно изменить наш программный код так, как показано ниже.
// Вложение пространства имен.
namespace Chapter3 {
namespace My3DShapes {
// Трехмерный класс Circle.
class Circle{}
// Трехмерный класс Hexagon.
class Hexagon{}
// Трехмерный класс Square.
class Square{}
}
}
Во многих случаях единственной задачей корневого пространства имен является расширение области видимости, поэтому непосредственно в рамках такого пространства имен может вообще не определяться никаких типов (как в случае пространства имей Chapter3). В таких случаях вложенное пространство имен можно определить, используя следующую компактную форму.
// Вложение пространства имен (вариант 2).
namespace Chapters.My3DShapes {
// Трехмерный класс Circle.
class Circle{}
// Трехмерный класс Hexagon.
class Hexagon{}
// Трехмерный класс Square.
class Square{}
}
С учетом того, что теперь пространство имен My3DShapes вложено в рамки корневого пространства имен Chapter3, вы должны изменить вид всех соответствующих операторов, использующих директиву using и псевдонимы типов.
using Chapter3.My3DShapes;
using The3DHexagon = Chapter3.My3DShapes.Hexagon;
Пространство имен по умолчанию в Visual Studio 2005