¿Cómo se implementan la covarianza y contravarianza genéricas en C # 4.0?

No asistí a PDC 2008, pero escuché algunas noticias de que C # 4.0 se anunció para admitir la covarianza y contravarianza genéricas. Es decir, List<string>se puede asignar a List<object>. ¿Cómo es posible? En el libro C # in Depth de Jon Skeet , se explica por qué los genéricos de C #...