using System; using System.Runtime.Serialization; [Serializable] public class Person{ private string name; [NonSerialized()] private int age; private Date dateOfBirth, dateOfDeath; public Person (string name, Date dateOfBirth){ this.name = name; this.dateOfBirth = dateOfBirth; this.dateOfDeath = null; age = Date.Today.YearDiff(dateOfBirth); } [OnDeserialized()] internal void FixPersonAfterDeserializing( StreamingContext context){ age = Date.Today.YearDiff(dateOfBirth); } public Date GetDateOfBirth(){ return new Date(dateOfBirth); } public int Age{ get {return Alive ? age : dateOfDeath.YearDiff(dateOfBirth);} } public bool Alive{ get {return dateOfDeath == null;} } public void Died(Date d){ dateOfDeath = d; } public void Update(){ age = Date.Today.YearDiff(dateOfBirth); } public override string ToString(){ return "Person: " + name + " *" + dateOfBirth + (Alive ? "" : " +" + dateOfDeath) + " Age: " + age; } }