web-dev-qa-db-fra.com

Comment les types de données primitifs sont-ils créés 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 structures primitives et je me demande si je pourrais faire mon propre type numérique.

51
Giovanni Del Gallo

En supposant que nous parlons d'un compilateur C # qui cible la Common Language Infrastructure (CLI), comme presque tout, il utilise essentiellement les types primitifs exposés par la CLI.

Il existe effectivement trois niveaux de soutien à considérer:

  • Authentiques primitives, avec leur propre représentation et instructions en IL
  • Types numériques dont le compilateur C # a une connaissance particulière, mais qui ne font pas partie de la CLI - en gros, System.Decimal. C'est également une partie du système de type commun (CTS), ce qui signifie que si vous créez un const decimal en C #, vous pouvez toujours le consommer en VB, par exemple. Mais il n'y a toujours pas de support direct [~ # ~] il [~ # ~] .
  • Autres types numériques, tels que BigInteger - vous pouvez en écrire vos propres.

Le milieu de la deuxième puce permet à C # d'avoir des littéraux décimaux et des constantes décimales, qui ne sont pas possibles pour la troisième puce. Par exemple, BigInteger ne prend pas en charge la langue, vous ne pouvez donc pas écrire:

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

Vous devez plutôt analyser une représentation sous forme de chaîne. De même, vous ne pouvez pas avoir un const BigInteger.

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

67
Jon Skeet

Les types primitifs tels que int et float sont directement pris en charge par le processeur, et la plate-forme .net et les langues ont une prise en charge intégrée similaire pour eux. Il n'y a donc aucun moyen de créer vos propres primitives au niveau de la langue.

7
JacquesB