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

Структура программы на языке Fore.NET упорядочивается путем применения пространств имен.

Единицы компиляции

Единица компиляции определяет общую структуру файла исходного текста программы. Единица компиляции состоит из следующих блоков (в указанном порядке): ноль или более директив Imports, затем ноль или более глобальных атрибутов и затем ноль или более определений членов пространства имен.

compilation-unit:

imports-directivesopt  global-attributesopt    namespace-member-declarationsopt

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

Директивы Imports единицы компиляции влияют только на определения глобальных атрибутов и членов пространства имен внутри данной единицы компиляции и никаким образом не воздействуют на другие единицы компиляции.

Глобальные атрибуты допускают применение атрибутов к компилируемой сборке.

Определения членов пространства имен каждой единицы компиляции попадают в единое общее пространство определений называемое глобальным пространством имен.

Директива 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 в данном пространстве имен и членов данного класса, соответствующих определениям глобальных членов:

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

Пример

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;

См.также:

Описания и синтаксические правила