예제 #1
0
        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();
        }