/*
         * Returns the root PersonComponent of the decoration stack;
         * references outputs a list of pointers to all the PersonDecorator
         * instances in the decoration stack.
         */
        public override PersonComponent Unwrap(
            out List <PersonDecorator> references)
        {
            PersonComponent        component  = this;
            List <PersonDecorator> decorators = new List <PersonDecorator>();

            while (component.isDecorator())
            {
                decorators.Add((PersonDecorator)component);
                component = ((PersonDecorator)component).decoratedComponent;
            }

            references = decorators;
            return(component);
        }