PascalABC.NET официальный канал
1.9K subscribers
520 photos
1 video
9 files
364 links
Официальный канал языка и системы программирования PascalABC.NET
Download Telegram
Сериализация в PascalABC.NET

Как сохранить в файл сложную структуру данных с множеством связей? А затем восстановить из файла с сохранением этих связей? Проблема в том, что связи - это ссылки на адреса памяти, а адрес памяти сохранить, а потом восстановить невозможно: адреса меняются при повторном запуске программы.

На помощь приходит так называемая сериализация - сохранение в файл данных вместе со структурой в некотором специальном формате. Обратная операция восстановления всей структуры данных из файла называется десериализацией.

В PascalABC.NET есть встроенные функции Serialize и Deserialize, выполняющие указанную задачу. В данном примере демонстрируется, как сериализовать и потом десериализовать односвязный список. Сериализуемый тип должен быть помечен атрибутом [Serializable]. Кроме этого, функция Deserialize возвращает тип Object, и его надо привести к нужному нам типу перед использованием.

Обратим также внимание на то, что стандартная процедура Print выводит структуру односвязного списка.

#NET
Как в одной ячейке памяти совместить значения разных типов

В .NET можно сделать аналог union-типа в C.
Этот тип должен быть записью с атрибутом StructLayout(LayoutKind.Explicit).
Кроме этого, у каждого поля записи необходимо указать атрибут, задающий сдвиг относительно начала записи.
Для наших целей для каждого поля сдвиг равен 0.

В данном примере r.r и r.i разделяют одну память, а а ячейка типа Rec занимает 8 байт - по размеру максимального поля.

#NET
Система тегов канала

Уважаемые читатели канала! Для удобства навигации статьи, публикуемые на канале, помечаются тегами. Можно щелкнуть по тегу чтобы увидеть все сообщения с данным тегом.

Список тегов по разделам

Типы и конструкции языка, алгоритмы и примеры кода
#особенности_языка
#стандартные
#строки
#матрицы
#списки
#словари
#кортежи
#файлы
#последовательности
#типы
#лямбды
#коллекции
#цепочки_методов
#oneliner

Алгоритмы
#рекурсия
#алгоритмы
#паттерны

Обучение
#дошкольникам
#начинающим
#студентам
#методика
#ЕГЭ
#обучение

Прикладные примеры
#графика
#3D
#игра
#проекты

Специфика PascalABC.NET
#IDE
#PascalABC
#NET

Парадигмы программирования
#объектно_ориентированное_программирование
#функциональное_программирование

Общие вопросы
#персоналии
#интересное
#теория
#сравнение_языков
#производительность
#стрим
#Линукс
Как узнать версию .NET, под которой запускается приложение

#NET
Отражение

Отражение - это механизм в .NET, который позволяет посмотреть содержимое любого типа. На скриншоте - все методы класса DateTime

#NET