Основы программирования на C#


Класс с атрибутом сериализации - часть 3


Метод реализует анализ желаний героини сказки. Первые три желания исполняются, и состояние героев меняется:

void ChangeStateOne() { this.status = "муж дворянки"; this.couple.status = "дворянка"; this.couple.wealth = "имение"; } void ChangeStateTwo() { this.status = "муж боярыни"; this.couple.status = "боярыня"; this.couple.wealth = "много поместий"; } void ChangeStateThree() { this.status = "муж государыни"; this.couple.status = "государыня"; this.couple.wealth = "страна"; }

Начиная с четвертого желания, все возвращается в начальное состояние - выполняется десериализация графа объектов:

void BackState(ref Personage fisher) { BinaryFormatter bf = new BinaryFormatter(); FileStream fs = new FileStream ("State.bin",FileMode.Open, FileAccess.Read); fisher = (Personage)bf.Deserialize(fs); fs.Close(); }

Обратите внимание, что у метода есть аргумент, передаваемый по ссылке. Этот аргумент получает значение - ссылается на объект, создаваемый методом Deserialize. Без аргумента метода не обойтись, поскольку возвращаемый методом объект нельзя присвоить текущему объекту this. Важно также отметить, что метод Deserialize восстанавливает весь граф объектов, возвращая в качестве результата корень графа.

В классе определен еще один метод, сообщающий о текущем состоянии объектов:

public void About() { Console.WriteLine("имя = {0}, возраст = {1},"+ "статус = {2}, состояние ={3}",name,age,status, wealth); Console.WriteLine("имя = {0}, возраст = {1}," + "статус = {2}, состояние ={3}", this.couple.name, this.couple.age,this.couple.status, this.couple.wealth); }

Для завершения сказки нам нужно в клиентском классе создать ее героев:

public void TestGoldFish() { Personage fisher = new Personage("рыбак", 70); Personage wife = new Personage("старуха", 70); fisher.marry(wife); Console.WriteLine("До золотой рыбки"); fisher.About(); fisher = fisher.AskGoldFish(); Console.WriteLine("Первое желание"); fisher.About(); fisher = fisher.AskGoldFish(); Console.WriteLine("Второе желание"); fisher.About(); fisher = fisher.AskGoldFish(); Console.WriteLine("Третье желание"); fisher.About(); fisher = fisher.AskGoldFish(); Console.WriteLine("Еще хочу"); fisher.About(); fisher = fisher.AskGoldFish(); Console.WriteLine("Хочу, но уже поздно"); fisher.About(); }




Начало  Назад  Вперед