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

Что такое пространства имен и что они делают? Давайте рассмотрим этот иерархический помощник в этой статье.

Пространства имен — это следующий шаг над классом в иерархии вещей. Точно так же, как вы можете использовать различные классы для организации и хранения функций, пространства имен используются для организации целых библиотек кода. Библиотеки кода представляют собой набор различных классов, поэтому вы можете видеть, как развивается иерархическая организация, когда вы продвигаетесь к вершине цепочки команд. Даже если вы новичок в программировании, вы, вероятно, уже сталкивались с пространствами имен. Давайте рассмотрим несколько примеров, чтобы у нас была визуальная ссылка на то, что такое пространства имен и что они делают.

При использовании intellisense в программе визуального сценария пользователь видит доступные параметры ключевого слова по мере ввода. Количество опций было бы абсолютно огромным без пространств имен, чтобы разбить их на нужные группы.

Пространства имен Unity

Если вы когда-либо использовали Unity, вы могли видеть пространство имен using Unity Engine в начале класса, пусть это то, что позволяет вашему классу наследовать от Mono Behavior. Mono Behavior — это то, что позволяет пользователю, по меньшей мере, прикреплять сценарии к игровым объектам.

Когда я закомментирую здесь пространство имен используя Unity Engine, вы увидите ошибку, потому что Mono Behavior больше не доступен. Я также потерял возможность использовать ключевые слова Сериализация поля.

Если я попытаюсь ввести ключевое слово Изображение, я получу ошибку.

Это связано с тем, что для ключевого слова Image необходимо использовать пространство имен UnityEngine.UI.

Точно так же при попытке доступа к воспроизводимому на временной шкале мне нужно использовать пространство имен.

Как только я вхожу используя UnityEngine.Timeline, ошибка исчезает, и доступ предоставляется.

Другой пример — попытка загрузить сцену с помощью ключевого слова LoadScene.

Чтобы получить к нему доступ, мне нужно использовать пространство имен UnityEngine.SceneManagement.

Конфликтующие имена классов

Одним из наиболее важных аспектов использования пространств имен является избежание конфликтов имен классов, которые могут возникнуть при использовании классов с несколько общими именами. Вы не можете неиметь несколько классовс одним и тем же именем,в одном проекте без ошибок, приводящих к поломке игры. Использование пространств имен для разделения этих конфликтующих имен классов является решением этой проблемы.

Предположим, я скачал пакет стороннего проигрывателя со скриптом Player. Если у меня уже есть собственный скрипт проигрывателя в проекте, я выдам компилятору ошибку.

Как видно здесь, Unity сообщает мне, что у него уже есть определение для Player. Как решить эту проблему? С новым пространством имен!

Перейдем к скрипту Player, расположенному в папке Player Asset. Просто используйте ключевое слово namespace, чтобы объявить его, а затем дайте ему имя! Я называю его MyPlayerPackage, а затем открываю несколько фигурных скобок. Весь класс Player из пакета перемещается внутри фигурных скобок после объявления пространства имен. Теперь два сценария Player разделены пространством имен и больше не будут вызывать конфликт.

Проверка консоли сообщает мне, что ошибки компилятора исчезли, и я могу использовать оба сценария Player.

Чтобы получить доступ к скрипту Player из пакета, мне нужно использовать пространство имен этого пакета в верхней части этого класса. В данном случае используется MyPlayerPackage.

Теперь я могу получить доступ к пакету проигрывателя, введя пространство имен MyPlayerPackage, а затем точечную нотацию и Player.

Переменная myPlayer также может быть инициализирована.

Если вы хотите дополнительно упорядочитьскрипты пакетов, вы можете использовать дополнительную точечную нотацию и предоставить более конкретные словесные описания того, какой ресурс вы используете. MyPlayerPackage.Warrior, позволит мне поместить всех моих игроков-воинов в это пространство имен.

Затем снова можно инициализировать объявленный myWarriorPlayer.

Если у вас есть студия, которая создает большие библиотеки ресурсов, вы можете настроить свои пространства имен так, как хотите, чтобы они были конкретными в отношении ресурсов, которые вы предоставляете. Я использовал здесь общие имена, чтобы дать представление о том, что вы можете использовать для своих собственных пространств имен.

Тогда все, что вам нужно, это ключевое слово using, за которым следует соответствующее пространство имен.

И, как всегда, вы можете инициализировать переменную, когда будете готовы.

Спасибо за прочтение!