public override Things GetThings(ThingsExample example)
        {
            switch (example)
            {
            case ThingsExample.Gold: return(new Gold());

            case ThingsExample.Silver: return(new Silver());

            case ThingsExample.Bronze: return(new Bronze());
            }
            throw new Exception("invalid metal example");
        }
        public override Things GetThings(ThingsExample example)
        {
            switch (example)
            {
            case ThingsExample.Paper: return(new Paper());

            case ThingsExample.Plastic: return(new Plastic());

            case ThingsExample.Nylon: return(new Nylon());
            }
            throw new Exception("invalid non-metal example");
        }
 public abstract Things GetThings(ThingsExample example);