Tout d'abord, cessez de l'utiliser, impossible à comprendre les noms de classe A, B, C. l'Utilisation des Animaux, des Mammifères, des Girafes, ou de la Nourriture, des Fruits, à l'Orange ou quelque chose où les relations sont claires.
Votre question est "pourquoi je ne peux pas attribuer une liste de girafes à une variable de type liste de l'animal, depuis que je peux attribuer une girafe à une variable de type animal?"
La réponse est: supposons que vous pourriez. Ce qui pourrait alors aller mal?
Eh bien, vous pouvez ajouter un Tigre à une liste d'animaux. Supposons que nous vous permettons de mettre une liste de girafes dans une variable qui contient une liste d'animaux. Ensuite, vous essayez d'ajouter un tigre à cette liste. Ce qui se passe? Voulez-vous la liste des girafes pour contenir un tigre? Voulez-vous un crash? ou voulez-vous le compilateur pour vous protéger de l'accident par l'affectation illégale en premier lieu?
Nous avons choisi la dernière.
Ce type de conversion est appelé un "covariant" la conversion. En C# 4, nous allons vous permettre de faire des covariants des conversions sur les interfaces et les délégués lors de la conversion est connu pour être toujours en sécurité. Voir mes articles de blog sur la covariance et la contravariance pour plus de détails. (Il y aura un frais un sur ce sujet sur deux le lundi et le jeudi de cette semaine).