Mot-clé « dynamique » C#… est-ce vraiment un mot-clé RÉSERVÉ ou simplement un identifiant qui signifie quelque chose de spécial lorsqu'il est utilisé comme type ?

StackOverflow https://stackoverflow.com/questions/2124001

Question

J'ai un analyseur C# 4.0.Il accepte « dynamique » comme mot-clé et comme type.Mon analyseur se déclenche sur les déclarations trouvées dans les programmes de travail C # 3.0 de la forme de:

dynamic = <exp> ;

Alors, c'est vraiment un mot-clé dynamique ?Ou peut-il toujours être utilisé comme nom d’identifiant arbitraire ?(Si oui, pourquoi « int » n'est-il pas traité de la même manière) ?

Existe-t-il une spécification de référence quelque part indiquant si Dynamic est un mot-clé ?La dernière spécification ECMA C# 4 ne mentionne même pas « dynamique », et le mieux que je puisse trouver sur le site MS est une « spécification préliminaire » qui dit que c'est un mot-clé mais je soupçonne que c'est juste une écriture bâclée.

Était-ce utile?

La solution

dynamic est un mot-clé contextuelle à partir de C # 4.0. La quatrième édition du ECMA C # spec ne se réfère pas à C # 4.0. (Notez la date de publication 2006).

MSDN décrit comme un mot-clé.

Il est aussi dans cette table des mots clés contextuels . (Faites défiler la liste.)

Autres conseils

Il est pas un mot-clé "normal" comme if, for etc.

Il est contextuelle mot-clé comme yield, from etc.

occupe en particulier,:

object dynamic = 0; // dynamic is a contextual keyword

mais cela ne fait pas:

object string = 0; // string is a regular keyword

Il faudrait "échapper" string comme ceci:

object @string = 0;

Cela fait beaucoup de sens en termes de compatibilité ascendante: il est peu probable que beaucoup de gens ont créé un type appelé dynamic (qui provoquerait l'ambiguïté, IIRC le type « vrai » gagne dans ce cas ) alors qu'il est très probable que le code existant utilise des variables appelé dynamic.

D'une certaine façon, il n'a même pas besoin d'être un mot-clé contextuel (et je ne crois pas que la spécification jamais réfère explicitement en tant que tel) - vous pouvez penser comme le nom d'un type qui est toujours disponible (comme string et object). Je suppose que string etc ont été faits à partir de mots-clés v1 pour éviter toute confusion, mais en ajoutant des mots-clés véritables (qui ne peuvent pas être utilisés comme identifiants) aurait un coût élevé de compatibilité maintenant.

C'est un mot-clé. (voir modification ci-dessous) Je suis un peu confus quant à ce que vous entendez par "pourquoi 'int' n'est-il pas traité de la même manière ?"

Vous ne pouvez pas faire ceci : int int = 5;

Mais vous pouvez faire ceci, même si ce n'est pas une bonne pratique : int @int = 5;

Le Spécification C# 4.0 mentionne dynamic à l'article 20.1.

MODIFIER:Plus d'informations...

Utiliser Dynamic comme nom de variable est autorisé, ce n'est donc pas un mot-clé (mais c'est un mot-clé contextuel - voir Le message de Sean Devlin).Voir la capture d'écran ci-dessous utilisant .NET 4.0 bêta

dynamic

Découvrez celui de Chris Burrow article de blog.Une citation intéressante du post :

Comme vous pouvez le voir, les membres visibles publiquement qui utilisent la dynamique de type, dans les coulisses, utilisent l'objet type lorsqu'ils sont émis.Il n'y a pas de type de framework «dynamique». Cependant, ces «objets» sont tous décorés de telle manière que le compilateur (ou n'importe qui d'autre) peut dire qu'ils sont censés être manipulés dynamiquement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top