Pourquoi les génériques C# ne peuvent-ils pas dériver d'un des paramètres du type générique comme ils peuvent le faire dans les templates C++ ? Je veux dire que je sais que c'est impossible parce que le CLR ne le supporte pas, mais pourquoi ?
Je suis conscient des différences profondes entre les modèles C++ et les génériques C# - les premiers sont des entités de compilation et doivent être résolus pendant la compilation, tandis que les seconds sont des entités d'exécution de première classe.
Pourtant, je ne vois pas la raison Les concepteurs du CLR n'ont pas mis au point un schéma permettant à un type générique du CLR de dériver de l'un de ses paramètres de type générique. Après tout, ce serait une fonctionnalité extrêmement utile, qui me manque personnellement beaucoup.
EDIT :
J'aimerais connaître l'existence d'un problème grave, dont la résolution entraînerait un prix si élevé pour la mise en œuvre de cette fonctionnalité qu'il justifierait qu'elle ne soit pas encore mise en œuvre. Par exemple, examinez cette déclaration fictive :
class C<T> : T
{
}
Comme l'a remarqué Eric Lippert, que se passerait-il si " Et si T est un struct ? Et si T est un type de classe scellée ? Et si T est un type d'interface ? Et si T est un C ? Et si T est une classe dérivée de C ? Et si T est un type abstrait avec une méthode abstraite ? Et si T a moins d'accessibilité que C ? Et si T est System.ValueType ? (Peut-on avoir une non-structure qui hérite de System.ValueType ?) Qu'en est-il de System.Delegate, System.Enum, et ainsi de suite ? "
Comme le poursuit Eric, " Ce sont les plus faciles, les plus évidentes ". En effet, il a raison. Ce qui m'intéresse, c'est un exemple concret d'une question ni facile ni évidente, qui est difficile à résoudre.