Сериализация в PascalABC.NET
Как сохранить в файл сложную структуру данных с множеством связей? А затем восстановить из файла с сохранением этих связей? Проблема в том, что связи - это ссылки на адреса памяти, а адрес памяти сохранить, а потом восстановить невозможно: адреса меняются при повторном запуске программы.
На помощь приходит так называемая сериализация - сохранение в файл данных вместе со структурой в некотором специальном формате. Обратная операция восстановления всей структуры данных из файла называется десериализацией.
В PascalABC.NET есть встроенные функции
Обратим также внимание на то, что стандартная процедура Print выводит структуру односвязного списка.
#NET
Как сохранить в файл сложную структуру данных с множеством связей? А затем восстановить из файла с сохранением этих связей? Проблема в том, что связи - это ссылки на адреса памяти, а адрес памяти сохранить, а потом восстановить невозможно: адреса меняются при повторном запуске программы.
На помощь приходит так называемая сериализация - сохранение в файл данных вместе со структурой в некотором специальном формате. Обратная операция восстановления всей структуры данных из файла называется десериализацией.
В PascalABC.NET есть встроенные функции
Serialize
и Deserialize
, выполняющие указанную задачу. В данном примере демонстрируется, как сериализовать и потом десериализовать односвязный список. Сериализуемый тип должен быть помечен атрибутом [Serializable]
. Кроме этого, функция Deserialize
возвращает тип Object
, и его надо привести к нужному нам типу перед использованием.Обратим также внимание на то, что стандартная процедура Print выводит структуру односвязного списка.
#NET
Как в одной ячейке памяти совместить значения разных типов
В .NET можно сделать аналог union-типа в C.
Этот тип должен быть записью с атрибутом
Кроме этого, у каждого поля записи необходимо указать атрибут, задающий сдвиг относительно начала записи.
Для наших целей для каждого поля сдвиг равен 0.
В данном примере
#NET
В .NET можно сделать аналог union-типа в C.
Этот тип должен быть записью с атрибутом
StructLayout(LayoutKind.Explicit)
.Кроме этого, у каждого поля записи необходимо указать атрибут, задающий сдвиг относительно начала записи.
Для наших целей для каждого поля сдвиг равен 0.
В данном примере
r.r
и r.i
разделяют одну память, а а ячейка типа Rec занимает 8 байт - по размеру максимального поля.#NET
Система тегов канала
Уважаемые читатели канала! Для удобства навигации статьи, публикуемые на канале, помечаются тегами. Можно щелкнуть по тегу чтобы увидеть все сообщения с данным тегом.
Список тегов по разделам
Типы и конструкции языка, алгоритмы и примеры кода
#особенности_языка
#стандартные
#строки
#матрицы
#списки
#словари
#кортежи
#файлы
#последовательности
#типы
#лямбды
#коллекции
#цепочки_методов
#oneliner
Алгоритмы
#рекурсия
#алгоритмы
#паттерны
Обучение
#дошкольникам
#начинающим
#студентам
#методика
#ЕГЭ
#обучение
Прикладные примеры
#графика
#3D
#игра
#проекты
Специфика PascalABC.NET
#IDE
#PascalABC
#NET
Парадигмы программирования
#объектно_ориентированное_программирование
#функциональное_программирование
Общие вопросы
#персоналии
#интересное
#теория
#сравнение_языков
#производительность
#стрим
#Линукс
Уважаемые читатели канала! Для удобства навигации статьи, публикуемые на канале, помечаются тегами. Можно щелкнуть по тегу чтобы увидеть все сообщения с данным тегом.
Список тегов по разделам
Типы и конструкции языка, алгоритмы и примеры кода
#особенности_языка
#стандартные
#строки
#матрицы
#списки
#словари
#кортежи
#файлы
#последовательности
#типы
#лямбды
#коллекции
#цепочки_методов
#oneliner
Алгоритмы
#рекурсия
#алгоритмы
#паттерны
Обучение
#дошкольникам
#начинающим
#студентам
#методика
#ЕГЭ
#обучение
Прикладные примеры
#графика
#3D
#игра
#проекты
Специфика PascalABC.NET
#IDE
#PascalABC
#NET
Парадигмы программирования
#объектно_ориентированное_программирование
#функциональное_программирование
Общие вопросы
#персоналии
#интересное
#теория
#сравнение_языков
#производительность
#стрим
#Линукс
Отражение
Отражение - это механизм в .NET, который позволяет посмотреть содержимое любого типа. На скриншоте - все методы класса DateTime
#NET
Отражение - это механизм в .NET, который позволяет посмотреть содержимое любого типа. На скриншоте - все методы класса DateTime
#NET