Pattern: AbstractFactory, c# flavour