Ошибки при работе с вещественными значениями
|
|
Действия с вещественными значениями не могут привести к переполнению или другой ошибке. При некорректных операциях мы получаем либо значение "бесконечность", либо значение NaN (не число).
|
Методы класса string
|
|
Все типы - классы. Класс string содержит в своем составе ряд мощных методов.
|
Преобразования Строка-Число
|
|
Преобразование из строки в число и обратно можно выполнять с помощью методов классов string, integer, real. |
| Методы класса Enum |
|
Все перечислимые типы можно обрабатывать с помощью методов класса Enum. В частности, легко получить массив строк - имен констант перечислимого типа. |
| Динамические массивы: особенности |
|
Память под динамические массивы можно выделять операцией new, как и вызов конструктора. Тип array of T параметра подпрограммы обозначает именно динамический массив, а не открытый массив, как в Delphi. |
Прямоугольные динамические массивы
|
|
n-мерные массивы также могут быть динамическими. |
| Процедурные переменные: операции += и -= |
|
Процедурные переменные могут хранить несколько действий, вызываемых последовательно.
|
| Бестиповые файлы: особенности |
|
Бестиповые файлы file изменены по сравнению с Delphi. Отсутствуют процедуры BlockRead и BlockWrite, но в бестиповой файл можно непосредственно записывать данные любых размерных типов.
|
| Инициализаторы полей в записях и классах |
|
Полям записи или класса можно присваивать значение непосредственно. Они инициализируются в момент создания переменной.
|
Особенности вызова конструктора
|
|
Для вызова конструктора используется опрация new.
|
| Определение методов внутри класса |
|
Методы могут определяться непосредственно в теле класса как в C++ и Java. |
| Методы в записях |
|
В записях могут быть методы. Это ощутимо меняет стиль обучения и позволяет учить объектному программированию на более раннем этапе. |
| Сборка мусора и отсутствие деструкторов |
|
Память, выделенную конструктором, явно освобождать не надо. Автоматический сборщик мусора возвращает память, занимаемую объектами, на которые никто не ссылается.
|
| Вывод записей и классов с помощью write |
|
Для вывода переменных типа класс или запись в операторе writeln следует переопределить виртуальный метод ToString. |
Создание и подключение dll
|
|
Библиотеки dll легко создать и использовать. Синтаксически библиотека dll представляет собой модуль, где вместо ключевого слова unit используется слово library.
|
Вызов функции из dll на C#
|
|
PascalABC.NET - полноценный .NET-язык, легко совмещаемый с другими .NET-языками. В данном примере показывается, как в программе на PascalABC.NET вызвать функцию из dll, созданной на C#.
|
Вызов функции из неуправляемой dll
|
|
Функции из обычных (неуправляемых) dll вызывать столь же легко.
|
| Определение типа во время выполнения программы |
|
Точный тип во время выполнения определяется с помощью метода GetType.
|
Упаковка и распаковка
|
|
При присваивании размерного типа объекту типа Object происходит упаковка. Для распаковки следует использовать явное приведение типа.
|
Перегрузка операций
|
|
Для типов, определенных пользователем, можно перегружать операции.
|
Обобщенные подпрограммы
|
|
Можно определять подпрограммы, параметризованные некоторым типом. Этот тип выводится в момент вызова подпрограммы по типам параметров.
|
Обобщенные классы
|
|
Класс может быть параметризован типом.
|
| Ограничения на параметры обобщенных классов |
|
Параметры обобщенных классов и подпрограмм могут удовлетворять дополнительным условиям, например, реализовывать интерфейс или иметь конструктор по умолчанию. |
| Интерфейсы |
|
Интерфейс похож на абстрактный класс без полей, методы которого не имеют реализации. |
Явная реализация интерфейса
|
|
Класс может реализовывать методы интерфейса неявно или явно. Явная реализация интерфейса может быть вызвана только через ссылку на интерфейс.
|
| Стандартные исключения |
|
Иерархия исключений заимствуется из .NET.
|
Методы расширения
|
|
Можно расширять типы, определенные ранее, новыми методами.
|
| Атрибуты |
|
Атрибут - дополнительная характеристика-описатель объекта. Атрибуты разработали с целью не вводить дополнительные ключевые слова в язык. Атрибутом можно пометить класс, запись, перечислимый тип, подпрограмму, метод, поле, параметр, возвращаемое значение, свойство, событие.
|
| Перечислимый тип: флаги |
|
Перечислимый тип с помощью атрибута [Flags] может быть превращен в тип-флаг.
|
События event
|
|
События event представляют собой процедурные переменные, имеющие ряд ограничений. Они предназначены для хранения обработчиков событий. |
Структурная эквивалентность типов
|
|
Здесь приводятся все составые типы в PascalABC.NET, эквивалентные структурно. Остальные составные типы поддерживают лишь именную эквивалентность. |
|
|
|
|
|
|