Person GetPerson()
    {
        Pilot p;

        p = (Pilot)PersonFactory.CreatePerson("Pilot");     // this code already knows to expect a Pilot, so why not just call CreatePilot or CreatePerson<Pilot>()?
        p = PersonFactory.CreatePilot();
        p = PersonFactory.CreatePerson <Pilot>();
        return(p);
    }