using System.Collections.Generic;
public class SchoolBase<TStudent>
public ICollection<TStudent> Students
public class StudentBase<TSchool>
public class SchoolViewModel<TSchool, TStudent> : SchoolBase<StudentBase<TSchool>>
where TSchool : SchoolBase<TStudent>
where TStudent : StudentBase<TSchool>
public TSchool School { get; set; }
public class PrivateSchool : SchoolBase<PrivateSchoolStudent>
public class PrivateSchoolStudent : StudentBase<PrivateSchool>
public class PublicSchool : SchoolBase<PublicSchoolStudent>
public class PublicSchoolStudent : StudentBase<PublicSchool>
public static void Main()
Console.WriteLine("Hello World");