W Cat - Описание языка PascalABC.NET
- Название:Описание языка PascalABC.NET
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:неизвестен
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
W Cat - Описание языка PascalABC.NET краткое содержание
PascalABC.NET — это язык программирования Паскаль нового поколения, включающий классический Паскаль, большинство возможностей языка Delphi, а также ряд собственных расширений. Он реализован на платформе Microsoft.NET и содержит все современные языковые средства: классы, перегрузку операций, интерфейсы, обработку исключений, обобщенные классы и подпрограммы, сборку мусора, лямбда-выражения, средства параллельного программирования.
PascalABC.NET является мультипарадигменным языком: на нем можно программировать в структурном, объектно-ориентированном и функциональном стилях.
PascalABC.NET — это также простая и мощная интегрированная среда разработки, поддерживающая технологию IntelliSense, содержащая средства автоформатирования, встроенный отладчик и встроенный дизайнер форм.
Описание языка PascalABC.NET - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
implementation
раздел реализации
end.
Имя библиотеки должно совпадать с именем pas-файла, в котором библиотека находится.
Имеется также упрощенный синтаксис библиотек - без разделов интерфейса и реализации, совпадающий с упрощенным синтаксисом модулей (за исключением заголовка).
В результате компиляции библиотеки в текущем каталоге создаётся .dll-файл, содержащий откомпилированную библиотеку.
Для подключения библиотеки к основной программе используется директива компилятора {$reference ИмяБиблиотеки}. Например:
{$reference ABC.dll}
{$reference ABC1.dll}
begin
writeln(a.GetType);
end.
Подключение библиотеки может проводиться в любом месте исходного файла.
Библиотеки ABC и ABC1 имеют соответственно вид:
library ABC;
var a: integer;
end.
и
library ABC1;
var a: real;
end.
В первую очередь имя ищется в исходном модуле, затем в модулях, подключенных в разделе uses в порядке справа налево, и только потом - в подключенных библиотеках в порядке подключения.
Согласно этому правилу в примере из предыдущего пункта переменная a будет иметь тип integer.
В случае коллизии имен используемое имя можно предварять именем библиотеки с последующей точкой:
{$reference ABC.dll}
{$reference ABC1.dll}
begin
writeln(ABC1.a.GetType);
end.
Документирующие комментарии
Можно помечать заголовки процедур, функций, методов, имена классов, типов, констант и переменных так называемыми документирующими комментариями. Документирующие комментарии всплывают в подсказках редактора при наведении курсора мыши на слово, при открытии скобки после имени подпрограммы и при выборе поля из списка полей, выпадающих при нажатии точки после имени. Система всплывающих подсказок в редакторе получила название Intellisense.
Документирующий комментарий располагается на строчке, предшествующей помечаемому объекту, и начинается с символов ///. Например:
const
/// Константа Pi
Pi = 3.14;
type
/// TTT - синоним целого типа
TTT = integer;
/// Документирующий комментарий класса XXX
XXX = class
end;
/// Документирующий комментарий процедуры p
procedure p(a : integer);
begin
end;
var
/// Документирующий комментарий переменной t1
t1: TTT;
Документирующие комментарии могут занимать несколько строк, каждая из которых должна начинаться с /// . Для комментирования подпрограмм можно использовать в первой строке документирующий комментарий ///-, тогда его содержимое меняет заголовок подпрограммы в подсказке при наведении курсора мыши. Например:
///- Exclude(var s : set of T; el : T)
///Удаляет элемент el из множества s
procedure Exclude(var s: TypedSet; el: object);
Если первая строка документирующего комментария имеет вид ///--, то подсказка не всплывает. Это делается для элементов, которые хочется скрыть от системы всплывающих подсказок.
Классы
Обзор классов и объектов
Класс представляет собой составной тип, состоящий из полей (переменных), методов (процедур и функций) и свойств. Описание класса имеет вид:
type
имя класса = class
секция1
секция2
...
end;
Каждая секция имеет вид:
модификатор доступа
описания полей
объявления или описания методов и описания свойств
Модификатор доступа в первой секции может отсутствовать, при этом подразумевается модификатор internal (видимость всюду внутри сборки).
Методы могут описываться как внутри, так и вне класса. При описании метода внутри класса его имя предваряется именем класса с последующей точкой. Например:
type
Person = class
private
fName: string;
fAge: integer;
public
constructorCreate(Name: string; Age: integer);
begin
fName := Name;
fAge := Age;
end;
procedure Print;
propertyName: string read fName;
propertyAge: integer read fAge;
end;
procedure Person.Print;
begin
writelnFormat('Имя: {0} Возраст: {1}', Name, Age);
end;
После слова classв скобках может быть указано имя класса-предка (см. Наследование), а также через запятую список поддерживаемых интерфейсов.
Перед словом classможет быть указано ключевое слово finalв этом случае от класса запрещено наследовать.
Все описания и объявления внутри класса образуют тело класса . Поля и методы образуют интерфейс класса. Инициализаторы полей описаны здесь.
Классы могут описываться только на глобальном уровне. Локальные определения классов (т.е. определения в разделе описания подпрограмм) запрещены.
В языке PascalABC.NET классы являются ссылочными типами. Это значит, что переменная типа класс хранит в действительности ссылку на объект.
Переменные типа класс называются объектами или экземплярами класса . Они инициализируются вызовом конструктора класса - специального метода, выделяющего память под объект класса и инициализирующего его поля:
var p: Person := new Person('Иванов',20);
После инициализации через переменную типа класс можно обращаться к публичным членам класса (полям, методам, свойствам), используя точечную нотацию:
Print(p.Name,p.Age);
p.Print;
По умолчанию процедура write для переменной типа класс выводит содержимое её публичных полей и свойств в круглых скобках через запятую:
write(p); // Иванов 20
Чтобы изменить это поведение, в классе следует переопределить виртуальный метод ToString класса Object - в этом случае именно он будет вызываться при выводе объекта.
Например:
type
Person = class
...
functionToString: string; override;
begin
Result := string.Format('Имя: {0} Возраст: {1}', Name, Age);
end;
end;
...
varp: Person := new Person('Иванов',20);
writeln(p); // Имя: Иванов Возраст: 20
Переменная типа класс является ссылкой и хранит ссылку на объект, создаваемый вызовом конструктора.
Как ссылка переменная типа класс может хранить значение nil:
p := nil;
...
if p = nilthen ...
При присваивании переменных типа класс копируется только ссылка. После присваивания обе переменные типа класс будут ссылаться на один объект и совместно модифицировать его:
varp1,p2: Person;
...
p1 := new Person('Петров',20);
p2 := p1;
p1.IncAge;
p2.Print; // Имя: Петров Возраст: 21
При сравнении переменных типа класс на равенство сравниваются ссылки, а не значения.
varp1 := new Person('Петров',20);
varp2 := new Person('Петров',20);
writeln(p1=p2); // False
p2 := p1;
writeln(p1=p2); // True
Это поведение можно изменить, перегрузив операцию = для класса.
Читать дальшеИнтервал:
Закладка: