Pourquoi n’y a-t-il pas de méthode membre const dans les parameters C # et const?

Contrairement à C ++, il n’y a pas de méthode membre const ni de parameters const en C #. Quelle est la raison?

Tout d’abord, il n’est pas nécessaire que nous fournissions une raison pour ne pas implémenter une fonctionnalité. Les fonctionnalités sont extrêmement chères; il doit exister une justification pour l’ implémentation d’une fonctionnalité, pas une justification pour ne pas l’ implémenter.

Deuxièmement, C # n’est pas un clone de C ++ ou C. Le simple fait qu’une fonctionnalité soit dans un autre langage n’est pas une raison pour la mettre en C #.

Troisièmement, “const” est profondément, tragiquement cassé en C et C ++. “const” ne vous donne aucune garantie sur laquelle vous pouvez compter. Si vous êtes l’appelant d’une méthode qui prend une référence const, vous n’avez aucune garantie que la méthode respecte la constness; la méthode a plusieurs façons de muter une référence const. Si vous êtes le consommateur d’une référence const, vous n’avez aucune garantie que l’object sous-jacent ne mutera pas de manière arbitraire. Étant donné que le contrat n’est appliqué ni du côté appelant ni du côté appelé, il est beaucoup plus faible que toute autre garantie que nous aimerions offrir dans le système de typage. Nous ne voudrions pas reproduire un système aussi défaillant.

Quasortingèmement, mettre constness dans le système de types CLR signifie que chaque langage devrait utiliser la même implémentation de constness; étant donné que différentes langues ont différentes significations pour constness, il serait plus difficile d’apporter plus de langues dans le CLR, pas plus facile .

Il existe de nombreuses raisons de ne pas utiliser cette fonctionnalité extrêmement coûteuse et très peu de raisons de le faire. Les fonctionnalités coûteuses et injustifiées ne sont pas implémentées.

C # ne l’a pas parce que .NET n’en a pas. Ce n’est pas le cas de .NET parce que l’équipe de développement CLR a décidé que cela ne valait pas la peine.

Vous pouvez lire sur des blogs consacrés à la SEP tels que “The Old New Thing” de Raymond Chen ou “Fabulous Adventures in Coding” d’Eric Lippert, sur la définition des priorités par Microsoft .

Il y a un article décent ici par Stan Lippman.