51 votes

Comment sont créés les types de données primitifs en C# ?

Comment System.float , System.int et d'autres types de primitives fonctionnent ? Je n'ai jamais compris comment il était possible de faire des structs de primitives et je me demande si je peux faire mon propre type numérique.

67voto

Jon Skeet Points 692016

En supposant que nous parlons d'un compilateur C# qui cible l'infrastructure de langage commune (CLI), comme presque tout le monde le fait, il utilise essentiellement les types primitifs exposés par la CLI.

Il y a effectivement trois niveaux de soutien à considérer :

  • De véritables primitives, avec leur propre représentation et leurs propres instructions en IL
  • Types numériques dont le compilateur C# a une connaissance particulière, mais qui ne font pas partie du CLI - en gros, System.Decimal . C'est également fait partie du Common Type System (CTS), ce qui signifie que si vous créez un fichier de type const decimal en C#, vous pouvez toujours le consommer en VB, par exemple. Mais il n'y a toujours pas de lien direct IL soutien.
  • D'autres types numériques, tels que BigInteger - vous pouvez écrire les vôtres.

La solution intermédiaire du deuxième point permet au C# d'avoir des littéraux décimaux et des constantes décimales, ce qui n'est pas possible pour le troisième point. Par exemple, BigInteger n'a pas de support de langue, donc vous ne pouvez pas écrire :

// This isn't valid
BigInteger bigInteger = 123456789012345678901234567890;

Vous devriez analyser une représentation de chaîne de caractères à la place. De même, vous ne pouvez pas avoir un const BigInteger .

(En théorie, il serait possible d'avoir un type avec un support en C# mais pas dans le CTS. Je ne connais pas de tels types).

7voto

JacquesB Points 19878

Les types primitifs comme int y float sont pris en charge directement par le processeur, et la plate-forme et les langages .net disposent d'un support intégré similaire. Il n'y a donc aucun moyen de créer vos propres primitives au niveau du langage.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X