Can I see one example that would make this piece of code compile?
    public IEnumerable<RouteBase> Routes
    {
        get
        {
            return new List<Route>()
            {
                new Route(...)
            }
        }
    }
What would you do if RouteCollection.MapRoute() didn't exist?
I'm trying to put my Controller in charge of mapping routes, not Global.asax.cs. public IEnumerable<RouteBase> Routes is a member of my Controller. If the Controller is responsible for a Route, it's a bad idea to decouple the Route by using a separate hardcoded URL in routes.MapRoute() in Global.asax.cs.
In response to Mr. Harvey:
public class MvcApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        RouteTable.Routes.Include(new RootController());
    }
}
public static class RouteCollectionExtension
{
    public static RouteCollection Include(this RouteCollection routes, IRoutedController controller)
    {
        foreach (var route in controller.Routes)
        {
            routes.Add(route);
        }
        return routes;
    }
}
And:
public class RootController : Controller, IRoutedController
{
    public ActionResult Index()
    {
        ViewData["Message"] = "Welcome to ASP.NET MVC!";
        return View();
    }
    public IEnumerable<RouteBase> Routes
    {
        get
        {
            return new List<Route>()
            {
                new Route("{controller}/{action}/{id}", ...?!?)
            };
        }
    }
}