Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
// Hexagon class
public class Hexagon { /* Еще интересные методы... */ }
}
<b>// Square.cs</b>
namespace MyShapes
{
// Square class
public class Square { /* И еще интересные методы...*/}
}
На заметку! Рекомендуется иметь в каждом файле кода только один класс. В ряде приводимых ранее примеров такое правило не соблюдалось, но причиной было упрощение изучения. В последующих главах каждый класс по возможности будет располагаться в собственном файле кода.
Обратите внимание на то, что пространство
MyShapes
CustomNamespaces
using
// Обратиться к пространству имен из библиотек базовых классов.
using System;
// Использовать типы, определенные в пространстве имен MyShapes.
using MyShapes;
Hexagon h = new Hexagon();
Circle c = new Circle();
Square s = new Square();
В примере предполагается, что файлы С#, где определено пространство имен
MyShapes
MyShapes
Разрешение конфликтов имен с помощью полностью заданных имен
Говоря формально, вы не обязаны применять ключевое слово
using
// Обратите внимание, что пространство имен MyShapes больше
не импортируется!
using System;
MyShapes.Hexagon h = new MyShapes.Hexagon();
MyShapes.Circle c = new MyShapes.Circle();
MyShapes.Square s = new MyShapes.Square();
Обычно необходимость в применении полностью заданных имен отсутствует. Они требуют большего объема клавиатурного ввода, но никак не влияют на размер кода и скорость выполнения. На самом деле в коде CIL типы всегда определяются с полностью заданными именами. С этой точки зрения ключевое слово
using
Тем не менее, полностью заданные имена могут быть полезными (а иногда и необходимыми) для избегания потенциальных конфликтов имен при использовании множества пространств имен, которые содержат идентично названные типы.
Предположим, что есть новое пространство имен
My3DShapes
// Еще одно пространство имен для работы с фигурами.
// Circle.cs
namespace My3DShapes
{
// Класс для представления трехмерного круга.
public class Circle { }
}
// Hexagon.cs
namespace My3DShapes
{
// Класс для представления трехмерного шестиугольника.
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;