Il n'y a pas implicite de l'héritage impliqués aussi loin que je peux dire. Je me serais attendu à ce bien - bien que j'imagine quelque chose d'étrange si A et B sont des termes génériques.
Il est spécifié dans la section 10.1.4 de la spécification:
Si une classe B dérive de la classe,
c'est une erreur de compilation pour Un de
dépendent B. Une classe dépend directement
sur sa classe de base directe (le cas échéant) et
dépend directement de la classe au sein d'
qui il est immédiatement imbriquée(si
tout). Compte tenu de cette définition, l'
ensemble complet de classes sur lesquelles un
classe dépend de la transitif
fermeture de la dépend directement de la
relation.
J'ai mis en évidence la section correspondante.
Ce qui explique pourquoi le compilateur est le rejet, mais pas pourquoi la langue de l'interdit. Je me demande si il y a un CLI restriction...
EDIT: Bon, j'ai eu une réponse de Eric Lippert. Fondamentalement, il serait techniquement possible (il n'y a rien dans la CLI pour l'interdire), mais:
- Permettant il serait difficile, dans le compilateur, d'invalider les différentes hypothèses actuelles autour de la commande et des cycles
- C'est assez étrange décision de conception, ce qui est plus facile d'interdire que de soutenir
Il a également été noté dans l'email de fil qu'il ferait ce genre de chose valide:
A.B x = new A.B.B.B.B.B.B.B.B.B.B.B.B();
... mais ce serait déjà (comme indiqué par Tinister) sera valide que si B dérivée de A.
L'imbrication + héritage = étrangeté...