using System.Collections.Generic;
public class GeographyTest : List<string>{
public class MathTest : List<string>{
public interface IGenerator {
GeographyTest GenerateGeographyTest();
MathTest GenerateMathTest();
public class MiddleSchoolGenerator : IGenerator{
public GeographyTest GenerateGeographyTest(){
return new GeographyTest(){"Where can we find Grand Canyon?"};
public MathTest GenerateMathTest(){
return new MathTest(){"800+20*5 = ?"};
public class HighSchoolGenerator : IGenerator{
public GeographyTest GenerateGeographyTest(){
return new GeographyTest(){"Mata-Utu is the capital of which country or territory?"};
public MathTest GenerateMathTest(){
return new MathTest(){"lg10*5^2 = ?"};
private IGenerator generator;
public School(IGenerator generator){
this.generator = generator;
public GeographyTest GenerateGeographyTest(){
return generator.GenerateGeographyTest();
public MathTest GenerateMathTest(){
return generator.GenerateMathTest();
public static void Main()
var middleSchool = new School(new MiddleSchoolGenerator());
Console.WriteLine(string.Join(",", middleSchool.GenerateMathTest()));
var highSchool = new School(new HighSchoolGenerator());
Console.WriteLine(string.Join(",", highSchool.GenerateMathTest()));