Architecture Net



         

Сериализация, или преобразование в последовательную форму - часть 2


[Serializable]
// [Преобразуемый в последовательную форму]
public _gc class HotelBroker:
// класс сборщика мусора HotelBroker:
public Broker,
// общедоступный Брокер
public IHotellnfo,
public IHotelAdmin,
public IHotelReservation
{
private: // частный
const int MAXDAY; // константа
const int MAXUNIT; // константа
[NonSerialized] ArrayList *cities;
// [Непреобразуемый в последовательную форму]
};
[Serializable]
// [Преобразуемый в последовательную форму]
public _gc class Hotel :
public Reservable
// класс сборщика мусора Гостиница:
Reservable
{
};
[Serializable]
// [Преобразуемый в последовательную форму]
public _gc class HotelReservation :
public Reservation
// общедоступный класс сборщика мусора HotelReservation:
Резервирование
{
} ;
[Serializable]
// [Преобразуемый в последовательную форму]
public _gc _abstract class Reservable
// сборщик мусора - абстрактный класс Reservable
{
} ;
[Serializable]
// [Преобразуемый в последовательную форму]
public _gc _abstract class Reservation
// сборщик мусора - абстрактный класс Reservation
{
} ;
[Serializable]
// [Преобразуемый в последовательную форму]
public _gc _abstract class Broker
// сборщик мусора - абстрактный класс Broker
{
};

Поле cities (города) было помечено как NonSerialized (Непреобразуемый в последовательную форму), так как название города, где размещается гостиница, сохраняется вместе с преобразованными в последовательную форму названиями гостиниц. Поэтому оно может быть восстановлено с помощью модифицированного метода AddCity. Поле cities (города) было бы пусто после преобразования класса HotelBroker из последовательной формы в параллельную, потому что оно не было сохранено.

private: // частный
void AddCity(String *city) // (Строка *city)
{
if (cities == 0) // если (города == 0)
{
cities = new ArrayList; // города
lEnumerator *pEnum = units->GetEnumerator();
while (pEnum->MoveNext() )
{
Hotel *h = // Гостиница
dynamic_cast<Hotel *>(pEnum->Current);
AddCity(h->City); // Город
}
}
// check if city already on list, add if not
// проверить, есть ли город уже в списке, добавить если нет
if (!cities->Contains(city))
// если (! города-> Содержат (город))
cities->Add(city);
// города-> Добавить (город);
}

CompEbook.ru Железо, дизайн, обучение и другие




Содержание  Назад  Вперед