English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Types de données C#

C# est un langage fortement typé. Cela signifie que nous devons déclarer un type de variable, indiquant le type de valeur à stocker, par exemple, un entier, un nombre décimal, un texte, etc.

Les variables suivantes déclarent et initialisent des variables de différents types de données.

string stringVar = "Hello World!!";
int intVar = 100;
float floatVar = 10.2f;
char charVar = 'A';
bool boolVar = true;

C# divise principalement les types de données en deux catégories : types de valeurs et types de références. Les types de valeurs incluent les types simples (par exemple int, float, bool et char), les types de liste, les types de structure et les types de valeurs nullable. Les types de références incluent les types de classe, les types d'interface, les types de délégué et les types de tableau. Les types de valeurs et les types de références seront détaillés dans le prochain chapitre.

Types de données prédéfinis en C#

C# inclut certains types de valeurs prédéfinis et de types de références. Le tableau suivant liste les types de données prédéfinis :

Typedescriptionplagesuffixe
byte8 type de données unsigned integer en bitsde 0 à 255
sbyte8 type de données signed integer en bits-128 à 127
short16 type de données signed integer en bits-32,768 à 32,767
ushort 16 type de données unsigned integer en bitsde 0 à 65,535
int32 type de données signed integer en bits-2,147,483,648

à

2,147,483,647


uint32 type de données unsigned integer en bitsde 0 à 4,294,967,295u
long64 type de données signed integer en bits-9,223,372,036,854,775,808
à
9,223,372,036,854,775,807
l
ulong64 type de données unsigned integer en bitsde 0 à 18,446,744,073,709,551,615ul
float32 type de point flottant simple en bits-3.402823e38 à 3.402823e38f
double64 type de point flottant double en bits-1.79769313486232e308 à 1.79769313486232e308d
decimal128 valeur décimale précise en bits28-29 Nombre de décimales valides(+ ou-)1.0 x 10e-28  à 7.9 x 10e28m
char16 caractère Unicoden'importe quel caractère valide, par exemple a,*, \x0058 (hex), ou\u0058 (Unicode)
bool8 true logique binaire/valeur falseTrue ou False
objectClasse de base de tous les types

string

Séquence de caractères Unicode



DateTimereprésente la date et l'heure0:00:00am 1/1/01
à
11:59:59pm 12/31/9999

Comme indiqué dans le tableau suivant, chaque type de données (à l'exception des chaînes et des objets) contient une plage de valeurs. Si cette valeur dépasse la plage autorisée par le type de données, le compilateur affichera une erreur. Par exemple, la plage du type de données int est-2,147,483,648à2,147,483,647Par conséquent, si la valeur allouée n'est pas dans cette plage, le compilateur affichera une erreur.

    Exemple : erreur à la compilation

// Erreur à la compilation : impossible de convertir implicitement le type 'long' en 'int'.
int i = 21474836470;

Les valeurs des types de données unsigned integer, long, float, double et decimal doivent être respectivement suffixées par u, l, f, d et m.

uint ui = 100u;
float fl = 10.2f;
long l = 45755452222222l;
ulong ul = 45755452222222ul;
double d = 11452222.555d;
decimal mon = 1000.15m;

Alias et types .NET

Les types de données prédéfinis sont des alias des noms des types .NET (classes CLR). Le tableau suivant liste les alias des types de données prédéfinis et les noms des classes .NET associées.

AliasTypes .NETType
byteSystem.Bytestruct
sbyteSystem.SBytestruct
intSystem.Int32struct
uintSystem.UInt32struct
shortSystem.Int16struct
ushortSystem.UInt16struct
longSystem.Int64struct
ulongSystem.UInt64struct
floatSystem.Singlestruct
doubleSystem.Doublestruct
charSystem.Charstruct
boolSystem.Booleanstruct
objectSystem.ObjectClass
stringSystem.StringClass
decimalSystem.Decimalstruct
DateTimeSystem.DateTimestruct

Cela signifie que peu importe si vous définissez int ou Int32les variables sont les mêmes.

int i = 345;
Int32 i = 345;// comme ci-dessus

Conversion de type

Les valeurs de certains types de données sont automatiquement converties en différents types de données en C#. Cela s'appelle une conversion implicite.

int i = 345;
float f = i;
Console.WriteLine(f); //Sortie :345

Dans l'exemple ci-dessus, la valeur de la variable entière i est assignée à la variable de type float f, car cette opération de conversion est prédéfinie en C#.

Voici le tableau des conversions de types de données implicites.

conversion implicitejusqu'à
sbyteshort, int, long, float, double decimal
byteshort, ushort, int, uint, long, ulong, float, double, decimal
shortint, long, float, double ou decimal
ushortint, uint, long, ulong, float, double ou decimal
intlong, float, double ou decimal.
uintlong, ulong, float, double ou decimal
longfloat, double ou decimal
ulongfloat, double ou decimal
charushort, int, uint, long, ulong, float, double ou decimal
floatDouble

La conversion de int, uint, long ou ulong en float, ainsi que la conversion de long ou ulong en double peut entraîner une perte de précision. Il n'y a pas de conversion implicite vers le type char.

Mais, tous les types de données ne peuvent pas se convertir implicitement en d'autres types de données. Par exemple, le type int ne peut pas se convertir implicitement en uint. Il doit être spécifié explicitement, comme suit.

public static void Main()
{
    int i = 100;
    uint u = (uint) i;
    Console.Write(i);
}

Dans l'exemple ci-dessus, l'entier i est explicitement converti en uint en spécifiant uint dans les crochets (uint). Cela convertit l'entier en uint.