private static Train FormTrain(string stationA) { var train = new Train(stationA); train.Print(); train.CoupleCars(new PassengerCar(100), new PassengerCar(30), new PostCar()); train.CoupleCars(new FreightCar(130)); //train.CoupleCars(new PassengerCar(52) { Conductor = null}); //train.CoupleCars(new PostCar() { Conductor = null}); //train.CoupleCars(new PassengerCar(88) { CurrentPassengerCount = 3} ); train.Print(); train.DecoupleCars(1); train.Print(); Console.WriteLine($"We have {train.GetCarCount<PassengerCar>()} passenger cars"); Console.WriteLine($"We have {train.GetCarCount<IHasConductor>()} conductor cars"); //Console.WriteLine($"We have {train.GetCarCount<int>()} integer cars?!"); Console.WriteLine(); Console.WriteLine("Engineer, this is dispatcher speaking. You are allowed to depart on green signal!"); CheckForDepart(train); SaveTrain(train, Stage.Formed); return(train); }