Understanding the Factory Pattern in C#