pascalabcnet/PABCNetHelp/LangGuide/Modules/uses.html

85 lines
5.1 KiB
HTML
Raw Permalink Normal View History

<html>
<head>
<meta http-equiv="Content-Language" content="en-us">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title></title>
<link rel="StyleSheet" href="../../default.css">
<style type="text/css">
.auto-style1 {
font-family: monospace;
font-size: 10pt;
color: #000080;
}
</style>
</head>
<body>
<H1>Раздел uses </H1>
<p>Раздел <b><code>uses</code></b> состоит из нескольких подряд идущих секций
<strong><span class="auto-style1">uses</span></strong>, каждая из которых имеет
вид:</p>
<blockquote>
<p><b><code>uses</code></b> <i>список имен</i><code>;</code></p>
</blockquote>
<p>Имена в списке перечисляются через запятую и могут быть либо
именами подключаемых внешних модулей <b>PascalABC.NET</b>,
либо пространствами имен .NET. Например:</p>
<blockquote>
<p><b><code>uses</code></b><code> System, System.Collections.Generic, MyUnit;</code></p>
</blockquote>
<p>Здесь <code>MyUnit</code> - модуль
<b>PascalABC.NET</b>, представленный в виде исходного
текста или откомпилированного .pcu-модуля, <code>
System</code> и <code>System.Collections.Generic</code>
- пространства имен .NET.</p>
<p>В модуле или основной программе, которая содержит раздел
<b><code>uses</code></b>, можно использовать все имена из
подключаемых модулей <b>PascalABC.NET</b> и пространств
имен .NET. Основное отличие между модулями и
пространствами имен .NET состоит в том, что модуль
содержит код, а пространства имен .NET содержат лишь
имена - для использования кода его необходимо подключить с помощью
<a href="../CompilerDirectives/index_directives.html">директивы
компилятора</a> <code>{$reference</code> <i>ИмяСборки</i><code>}</code>,
где <i>ИмяСборки</i> - имя dll-файла,
содержащего .NET-код. Другое не менее важное отличие
состоит в том, что в модуле или основной программе нельзя использовать имена,
определенные в другом модуле, без подключения этого модуля в разделе <b>
<code>uses</code></b>.
Напротив, если сборка .NET подключена директивой
<code>$reference</code>, то можно использовать ее имена,
явно уточняя их пространством имен, не подключая это пространство имен в разделе
uses. Например:</p>
<blockquote>
<p><code><b>begin</b><br>
&nbsp; System.Console.WriteLine('PascalABC.NET');<br>
<b>end</b>.</code></p>
</blockquote>
<p>По умолчанию в первой секции <b><code>uses</code></b>
неявно первым подключается системный модуль PABCSystem, содержащий стандартные
константы, типы, процедуры и функции. Даже если раздел <b><code>uses</code></b>
отсутствует, модуль PABCSystem подключается неявно. Кроме того, по умолчанию с помощью неявной директивы
<code>$reference</code> подключаются сборки System.dll, System.Core.dll и
mscorlib.dll, содержащие основные .NET-типы.</p>
<p>Поиск глобальных имен осуществляется вначале в текущем модуле
или основной программе, затем во всех подключенных модулях и пространствах имен,
начиная с самого правого в секции <b><code>uses</code></b>
и заканчивая самым левым. При этом считается, что пространство
имен более правого модуля вложено в пространство имен более левого. Таким
образом, конфликта имен не происходит. Если необходимо использовать имя из
конкретного модуля или пространства имен, следует использовать запись </p>
<blockquote>
<p><i>ИмяМодуля</i><code>.</code><i>Имя</i></p>
</blockquote>
<p>или</p>
<blockquote>
<p><i>ИмяПространстваИменNET</i><code>.</code><i>Имя</i></p>
</blockquote>
<p>В качестве имени модуля может выступать также имя основной
программы если у нее присутствует заголовок <b><code>program</code></b>.</p>
</body>
</html>