Раздел uses
Раздел uses
состоит из нескольких подряд идущих секций
uses, каждая из которых имеет
вид:
uses
список имен;
Имена в списке перечисляются через запятую и могут быть либо именами подключаемых внешних модулей PascalABC.NET, либо пространствами имен .NET. Например:
uses
System, System.Collections.Generic, MyUnit;
Здесь MyUnit
- модуль
PascalABC.NET, представленный в виде исходного
текста или откомпилированного .pcu-модуля,
System
и System.Collections.Generic
- пространства имен .NET.
В модуле или основной программе, которая содержит раздел
uses
, можно использовать все имена из
подключаемых модулей PascalABC.NET и пространств
имен .NET. Основное отличие между модулями и
пространствами имен .NET состоит в том, что модуль
содержит код, а пространства имен .NET содержат лишь
имена - для использования кода его необходимо подключить с помощью
директивы
компилятора {$reference
ИмяСборки}
,
где ИмяСборки - имя dll-файла,
содержащего .NET-код. Другое не менее важное отличие
состоит в том, что в модуле или основной программе нельзя использовать имена,
определенные в другом модуле, без подключения этого модуля в разделе
uses
.
Напротив, если сборка .NET подключена директивой
$reference
, то можно использовать ее имена,
явно уточняя их пространством имен, не подключая это пространство имен в разделе
uses. Например:
begin System.Console.WriteLine('PascalABC.NET');
end.
По умолчанию в первой секции uses
неявно первым подключается системный модуль PABCSystem, содержащий стандартные
константы, типы, процедуры и функции. Даже если раздел uses
отсутствует, модуль PABCSystem подключается неявно. Кроме того, по умолчанию с помощью неявной директивы
$reference
подключаются сборки System.dll, System.Core.dll и
mscorlib.dll, содержащие основные .NET-типы.
Поиск глобальных имен осуществляется вначале в текущем модуле
или основной программе, затем во всех подключенных модулях и пространствах имен,
начиная с самого правого в секции uses
и заканчивая самым левым. При этом считается, что пространство
имен более правого модуля вложено в пространство имен более левого. Таким
образом, конфликта имен не происходит. Если необходимо использовать имя из
конкретного модуля или пространства имен, следует использовать запись
ИмяМодуля
.
Имя
или
ИмяПространстваИменNET
.
Имя
В качестве имени модуля может выступать также имя основной
программы если у нее присутствует заголовок program
.