8
votes

Pourquoi C # n'a-t-il pas été conçu avec 'const' pour les variables et les méthodes?

Dupliqué possible:
"Conscation correctionness" en C #

Je soupçonne const a été simplifié pour la spécification C # pour la simplicité de langue générale. Y avait-il une raison spécifique pour laquelle nous ne pouvons pas déclarer des références ou des méthodes variables comme const comme nous pouvons avec C ++? E.g.: xxx


4 commentaires

Vous voulez dire, en plus de "parce que c ++ - style const a des implications de grande portée qui sont vraiment difficiles à faire à droite (de la conception et de la mise en œuvre de POV) et pour lesquelles il n'y a pas de support d'exécution"? C'est une fonctionnalité utile mais vraiment coûteuse. FWIW, F # prend l'approche opposée: rien est mutable, sauf indication contraire comme telle. Les interactions avec le cadre peuvent être non évidentes, cependant.


Je ne suis pas d'accord sur le fait que ceci est un dupliqué exact. L'ancienne question demande comment implémenter cela dans le code. @spoulson demande pourquoi ce n'est pas dans le compilateur.


Conscons L'exactitude doit être appliquée pour être significative. Cela devient difficile lorsque tout langage activé .NET peut consommer les types créés par une autre langue. Il y a probablement près de cent d'entre eux. La syntaxe de toutes ces langues devrait être modifiée pour accueillir les attributs de déclaration de déclaration et leurs compilateurs modifiés pour leur vérifier. En d'autres termes, la correction de la const est considérablement conforme non CLS.


@HANSPASTANT: Attributs Pour indiquer si les méthodes et les propriétés de struct affectent la structure sous-jacente seraient utiles même si elles n'étaient pas appliquées, car elles pouvaient dire compilateurs quelles méthodes et propriétés devraient être utilisables sur des structures en lecture seule. En outre, même si une langue n'avait pas de soutien à la Conscitness, la gigue pourrait l'appliquer en faisant une copie défensive des structures si le fournisseur ou le destinataire ne peut pas garantir que ce n'est pas nécessaire, mais omettez l'opération de la copie si fournisseur et le destinataire peut être vérifié comme ne l'ayant pas besoin.


3 Réponses :


0
votes

Je soupçonne que la première phrase de votre question répond.


0 commentaires

0
votes

Je pense que vous pouvez déclarer variables comme const en C #. statique aussi, si vous ressentez le besoin.

http://msdn.microsoft.com/ EN-US / Bibliothèque / E6W8FE1B (vs.71) .aspx


1 commentaires

Seuls les types primitifs (et string ) dans c # peuvent être déclarés const .



1
votes

Un const effectue une substitution de l'heure de compilation de la valeur où qu'elle soit utilisée et ne présente donc aucun sens d'exécution. En général, ce que vous proposez pour les objets constants serait très difficile pour le compilateur de déterminer (si une méthode modifiera l'objet ou non). Votre proposition d'utiliser un mot clé Const en tant que modificateur d'accès met également une charge sur l'écrivain et vous êtes toujours laissé avec un problème de vérification de quelque chose ou ne modifie pas l'objet. De plus, vous imposez quelque chose sur l'objet qui n'a pas de sens dans tous les contextes. Qu'est-ce que cela signifie si la méthode est constituée mais vous ne l'utilisez pas comme objet Const? La fonctionnalité que vous souhaitez est généralement accomplie en implémentant une interface et n'exposant que les parties "en lecture seule" de la classe.


0 commentaires