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.
Réponses
Trop de publicités?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 typeconst 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).