Практический пример: динамический список с поддержкой сериализации
Прежде чем приводить полный код примера, мы хотим предупредить об одной потенциальной трудности, которая постоянно возникает при восстановлении сохраненных объектов, а особенно объектов, хранящихся в динамических списках. Итак, после завершения восстановления мы получаем набор обобщенных объектов, хранящихся в динамическом массиве.
Но как определить истинный тип этих объектов, чтобы выполнить правильное преобразование? В следующем примере эта информация жестко фиксируется в процессе восстановления, поскольку мы точно знаем порядок занесения объектов иерархии Employee в массив. В более общей ситуации эти сведения пришлось бы сохранять в отдельном файле.
В настоящем примере мы создаем менеджера (класс Manager) с именем Sally и секретаря (класс Secretary) с именем Тот. Класс Manager содержит внутренний объект класса Secretary в одной из переменных; класс Secretary содержит ссылку на Manager.
Примечание
Не забудьте включить в решение ссылку на сборку System.Runtime.Serialization.Formatters.Soap, это необходимо для работы программы.
Ниже приведен код тестовой части программы.
Option Strict On ' Использует сборку System.Runtime.Serialization.Formatters.Soap Imports System.IO Imports System.Runtime.Serialization Imports System.Runtime.Serialization.Formatters Module Modulel Sub Main() Dim Sally As New Manager("Sally". 150000) Dim Tom As Secretary Tom = New Secretary("Tom". 100000, Sally) Sally.MySecretary = Tom Dim Employees As New ArrayList() Employees. Add(Tom) Employees.Add(Sally) Console.WriteLine(Tom.TheName & "is employee " & _ Tom.ThelD & "and has salary " & Tom.Salary) Console.WriteLine("Tom's boss is " & Tom.MyManager.TheName) Console.WriteLine("Sally's secretary is " & Sally.MySecretary.TheName) Console. WriteLine() Console.Writel_ine(Sally.TheName & "is employee " & _ Sally.ThelD & "has salary " & Sally.Salary) Sally.RaiseSalary(0.lD) Console.WriteLinet"After raise " & Sally.TheName &_ "has salary "_ & Sally.Salary)
Рис. 9.5. Сериализация динамического массива