private void EndRoleAndReplaceWithNew(Role value) { if (value != null) { try { SimDescription currentActor = value.mSim; value.RemoveSimFromRole(); Drunkard aRole = Drunkard.clone(value, currentActor); this.mCurrentRole = aRole; RoleManager.sRoleManager.AddRole(aRole); if (Message.Sender.IsDebugging()) { Message.Sender.Debug(this, "Role cloning succeeded: " + currentActor.FullName); } } catch (Exception ex) { Message.Sender.ShowError(this, "Cannot create custom role", true, ex); this.mCurrentRole = value; } } }
public static void Init(string[] args) { Doctor Riviera = new Doctor(); Patient Homer = new Patient(); var didBreath = Homer.Breathe(); //throws exception, as invokes Patient's, but wasn't intended. Homer.Cough(); Drunkard Barney = new Drunkard(); Sicky Burns = new Sicky(); Bartender Moe = new Bartender(); List <Person> peopleWaitingDoctorsOffice = new List <Person>() { Homer, Barney, Burns, Moe }; Riviera.Examine(Homer); Moe.ServeAnyBeerTo(Homer); //Moe.ServeAnyBeerTo(Barney); //actually want to examine each of Homer, Barney, Burns, //and ... what? return different results? // enjoy poly morph ism ... ! foreach (var person in peopleWaitingDoctorsOffice) { // tuple response var result = Riviera.Examine(person); // iterate tuple response foreach (var tupleResult in result.GetType().GetProperties() .Select(property => property.GetValue(result))) { Console.WriteLine(tupleResult); } } Console.ReadKey(); }