Структура программы на языке Fore.NET упорядочивается путем применения пространств имен.
Единица компиляции определяет общую структуру файла исходного текста программы. Единица компиляции состоит из следующих блоков (в указанном порядке): ноль или более директив Imports, затем ноль или более глобальных атрибутов и затем ноль или более определений членов пространства имен.
compilation-unit:
imports-directivesopt global-attributesopt namespace-member-declarationsopt
Программа Fore.NET состоит из одной или более единиц компиляции каждая из которых размещается в отдельном файле исходного текста. Когда производится компиляция программы все единицы компиляции обрабатываются совместно. Соответственно единицы компиляции могут зависеть друг от друга, возможно циклическим образом.
Директивы Imports единицы компиляции влияют только на определения глобальных атрибутов и членов пространства имен внутри данной единицы компиляции и никаким образом не воздействуют на другие единицы компиляции.
Глобальные атрибуты допускают применение атрибутов к компилируемой сборке.
Определения членов пространства имен каждой единицы компиляции попадают в единое общее пространство определений называемое глобальным пространством имен.
Директивы Imports упрощают использование пространств имен и типов, определенных в других пространствах имен и влияют на процесс разрешения имен при компиляции.
Директива Imports импортирует типы, содержащиеся в пространстве имен, в непосредственно объемлющую данную директиву единицу компиляции, либо тело другого пространства имен, что позволяет использовать неквалифицированные идентификаторы при обращении к типам.
imports-directives:
imports-directive
imports-directives imports-directive
imports-directive:
Imports namespace-name ;
Директива Imports импортирует только типы из указанного пространства имен не производя импорт типов из вложенных в него пространств имен. В случае наличия в импортированном пространстве имен члена имя которого совпадает с именем, определенным внутри текущей единицы компиляции или тела пространства имен, приоритет имеет имя определенное локально, а не импортированное.
Определение пространства имен состоит из ключевого слова Namespace за которым следует наименование пространства имен и его тело, завершающиеся последовательностью ключевых слов End Namespace.
namespace-declaration:
Namespace namespace-identifier namespace-body End Namespace namespace-identifieropt ;
namespace-identifier:
qualified-identifier
qualified-identifier:
identifier
qualified-identifier . identifier
namespace-body:
imports-directivesopt namespace-member-declarationsopt
Определение пространства имен может быть произведено как на верхнем уровне внутри единицы компиляции, так и внутри другого пространства имен. Когда определение пространства имен производится на верхнем уровне внутри единицы компиляции, данное пространство имен становится членом глобального пространства имен. Когда определение пространства имен производится внутри другого пространства имен, вложенное пространство имен становится членом объемлющего. В обоих случаях наименование пространства имен должно быть уникальным внутри объемлющего пространства имен.
Пространства имен являются открытыми неявным образом и их определения не могут содержать модификаторов доступа.
Опциональные директивы Imports в теле пространства имен импортируют имена других пространств имен и типов позволяя ссылаться на них непосредственно без использования квалифицированных идентификаторов.
Пространства имен являются расширяемыми, два определения пространств имен с одинаковыми полностью квалифицированными именем пополняют одно пространство определений.
Определениями членов пространства имен могут быть либо определения типов, либо определения других пространств имен, либо определения глобальных членов.
namespace-member-declarations:
namespace-member-declaration
namespace-member-declarations namespace-member-declaration
namespace-member-declaration:
namespace-declaration
type-declaration
globals-declaration
Определение типа это либо определение класса, либо определение структуры, либо определение интерфейса, либо определение перечислимого типа, либо определение делегата.
type-declaration:
class-declaration
struct-declaration
interface-declaration
enum-declaration
delegate-declaration
Определение типа может быть произведено либо на верхнем уровне единицы компиляции, либо как определение члена внутри пространства имен, класса или структуры.
Когда определение типа T производится на верхнем уровне единицы компиляции его полное имя просто T. Когда определение типа производится внутри пространства имен, класса или структуры, его полное имя - это N.T, где N - это полное имя объемлющего пространства имен, класса или структуры. Тип, определенный внутри класса или структуры, называется вложенным типом. Допустимые модификаторы доступа для определения типа зависят от контекста в котором это определение производится:
Типы определенные в единицах компиляции или пространствах имен могут иметь открытый, либо сборочный доступ. По умолчанию они имеют сборочный доступ.
Типы определенные в классах могут иметь открытый, родовой, сборочный, сборочный родовой или закрытый доступ. По умолчанию они имеют закрытый доступ.
Типы определенные в структурах могут иметь открытый, сборочный или закрытый доступ. По умолчанию они имеют закрытый доступ.
Язык Fore.NET поддерживает определение глобальных констант, переменных и методов в целях обеспечения обратной совместимости с языком Fore. Настоятельно не рекомендуется использовать глобальные определения в разрабатываемом с нуля коде, т.к. в будущем поддержка таких конструкций языка будет прекращена.
globals-declaration:
global-constant-declaration
global-field-declaration
global-member-declaration
global-constant-declaration:
attributesopt global-declaration-modifiersopt Const identifier = constant-expression ;
global-field-declaration:
global-declaration-modifiersopt Var identifier : type variable-initializeropt ;
global-method-declaration:
global-sub-declaration
global-function-declaration
global-sub-declaration:
attributesopt global-declaration-modifiersopt
Sub member-name ( formal-parameter-listopt ) ; method-localsopt
Begin method-body End Sub member-nameopt ;
global-function-declaration:
attributesopt global-declaration-modifiersopt
Function member-name ( formal-parameter-listopt ) : return-type ; method-localsopt
Begin method-body End Function member-nameopt ;
global-declaration -modifiers:
Public
Friend
Определение глобальных членов пространства имен приводит к определению специального системного класса __Globals в данном пространстве имен и членов данного класса, соответствующих определениям глобальных членов:
Класс __Globals, содержащий определения глобальных членов пространства имен, определяется в данном пространстве имен как завершенный класс с открытым доступом.
Определениям глобальных констант соответствуют определения констант в данном классе. Такие константы имеют открытый доступ, имя и значения соответствующие таковым в определении глобальной константы.
Определениям глобальных переменных соответствуют определения статических полей в данном классе. Такие поля имеют открытый доступ, имя, тип и инициализатор, соответствующие таковым в определении глобальной переменной.
Определениям глобальных методов соответствуют определения статических методов в данном классе. Такие методы имеют открытый доступ, имя, список параметров и тип возвращаемого значения, соответствующие таковым в определении глобального метода, также они являются завершенными.
Глобальные определения в пространствах имен участвуют в процессе разрешения перегруженных имен, простого имени и доступа к члену.
Imports System;
Imports Prognoz.Platform.Interop.Metabase;
Imports Prognoz.Platform.Interop.Ui;
[Assembly(AssemblyTitle("Тестовое приложение"))]
[Assembly(AssemblyCompanyAttribute("Any Company"))]
[Assembly(AssemblyVersion("1.0.0.0"))]
Namespace UserApplication
Var
s: string;
i: integer;
Const
e = 0.0001;
//Объявление типов и членов типов
//организующих код пользовательского приложения
End Namespace;
См.также: