MySQL Java JavaScript PHP Python HTML-CSS C-sharp C++ Go

Tipuri de date

La fel ca în multe limbaje de programare, C# are propriul său sistem de tipuri de date, care este utilizat pentru crearea variabilelor. Tipul de date definește reprezentarea internă a datelor, mulțimea valorilor pe care le poate lua un obiect, precum și acțiunile permise asupra obiectului.

În limbajul C# există următoarele tipuri de date de bază:

  • bool

Stochează valoarea true sau false (literali logici). Reprezentat de tipul sistemului System.Boolean.

bool alive = true;
bool isDead = false;
  • byte

Stochează un număr întreg de la 0 la 255 și ocupă 1 octet. Reprezentat de tipul sistemului System.Byte.

byte bit1 = 1;
byte bit2 = 102;
  • sbyte

Stochează un număr întreg de la -128 la 127 și ocupă 1 octet. Reprezentat de tipul sistemului System.SByte.

sbyte bit1 = -101;
sbyte bit2 = 102;
  • short

Stochează un număr întreg de la -32768 la 32767 și ocupă 2 octeți. Reprezentat de tipul sistemului System.Int16.

short n1 = 1;
short n2 = 102;
  • ushort

Stochează un număr întreg de la 0 la 65535 și ocupă 2 octeți. Reprezentat de tipul sistemului System.UInt16.

ushort n1 = 1;
ushort n2 = 102;
  • int

Stochează un număr întreg de la -2147483648 la 2147483647 și ocupă 4 octeți. Reprezentat de tipul sistemului System.Int32. Toți literalii întregi, implicit, reprezintă valori de tip int.

int a = 10;
int b = 0b101;  // formă binară b = 5
int c = 0xFF;   // formă hexazecimală c = 255
  • uint

Stochează un număr întreg de la 0 la 4294967295 și ocupă 4 octeți. Reprezentat de tipul sistemului System.UInt32.

uint a = 10;
uint b = 0b101;
uint c = 0xFF;
  • long

Stochează un număr întreg de la –9 223 372 036 854 775 808 la 9 223 372 036 854 775 807 și ocupă 8 octeți. Reprezentat de tipul sistemului System.Int64.

long a = -10;
long b = 0b101;
long c = 0xFF;
  • ulong

Stochează un număr întreg de la 0 la 18 446 744 073 709 551 615 și ocupă 8 octeți. Reprezentat de tipul sistemului System.UInt64.

ulong a = 10;
ulong b = 0b101;
ulong c = 0xFF;
  • float

Stochează un număr cu virgulă mobilă de la -3.4*10^38 la 3.4*10^38 și ocupă 4 octeți. Reprezentat de tipul sistemului System.Single.

  • double

Stochează un număr cu virgulă mobilă de la ±5.0*10^-324 la ±1.7*10^308 și ocupă 8 octeți. Reprezentat de tipul sistemului System.Double.

  • decimal

Stochează un număr fracționar zecimal. Dacă este utilizat fără punct zecimal, are valoarea de la ±1.0*10^-28 la ±7.9228*10^28, poate stoca 28 de cifre după punctul zecimal și ocupă 16 octeți. Reprezentat de tipul sistemului System.Decimal.

  • char

Stochează un caracter unic în codificarea Unicode și ocupă 2 octeți. Reprezentat de tipul sistemului System.Char. Acest tip corespunde literalilor de tip caracter:

char a = 'A';
char b = '\x5A';
char c = '\u0420';
  • string

Stochează un set de caractere Unicode. Reprezentat de tipul sistemului System.String. Acest tip corespunde literalilor de tip șir.

string hello = "Hello";
string word = "world";
  • object

Poate stoca o valoare de orice tip de date și ocupă 4 octeți pe platforme pe 32 de biți și 8 octeți pe platforme pe 64 de biți. Reprezentat de tipul sistemului System.Object, care este de bază pentru toate celelalte tipuri și clase .NET.

object a = 22;
object b = 3.14;
object c = "hello fdc";

De exemplu, să definim câteva variabile de tipuri diferite și să afișăm valorile lor pe consolă:

string name = "Tom";
int age = 33;
bool isEmployed = false;
double weight = 78.65;

Console.WriteLine($"Nume: {name}");
Console.WriteLine($"Vârstă: {age}");
Console.WriteLine($"Greutate: {weight}");
Console.WriteLine($"Angajat: {isEmployed}");

Ieșirea pe consolă a programului:

Utilizarea sufixelor

La atribuirea valorilor, trebuie să ținem cont de următorul aspect: toți literalii cu virgulă mobilă (numere fracționare) sunt considerați valori de tip double. Și pentru a indica faptul că un număr fracționar reprezintă tipul float sau decimal, trebuie să adăugăm un sufix la literal: F/f - pentru float și M/m - pentru decimal.

float a = 3.14F;
float b = 30.6f;

decimal c = 1005.8M;
decimal d = 334.8m;

În mod similar, toți literalii întregi sunt considerați valori de tip int. Pentru a indica explicit că un literal întreg reprezintă valoarea de tip uint, trebuie să utilizăm sufixul U/u, pentru tipul long - sufixul L/l, iar pentru tipul ulong - sufixul UL/ul:

uint a = 10U;
long b = 20L;
ulong c = 30UL;

Utilizarea tipurilor sistemice

Mai sus, la enumerarea tuturor tipurilor de date de bază, pentru fiecare s-a menționat tipul sistemului. Acest lucru se datorează faptului că denumirea tipului încorporat reprezintă, în esență, o abreviere a tipului sistemului. De exemplu, următoarele variabile vor fi echivalente ca tip:

int a = 4;
System.Int32 b = 4;

Tipizarea implicită

Anterior, am indicat explicit tipul variabilelor, de exemplu, int x;. Și compilatorul știa deja la rulare că x stochează o valoare întreagă.

Cu toate acestea, putem folosi și modelul de tipizare implicită:

var hello = "Hello to World";
var c = 20;

Pentru tipizarea implicită, în locul denumirii tipului de date se folosește cuvântul cheie var. Apoi, la compilare, compilatorul deduce tipul de date pe baza valorii atribuite. Deoarece implicit toate valorile întregi sunt considerate valori de tip int, variabila c va avea tipul int. În mod similar, variabilei hello i se atribuie un șir de caractere, astfel că aceasta va avea tipul string.

Aceste variabile sunt similare celor obișnuite, dar au unele restricții.

În primul rând, nu putem declara o variabilă tipizată implicit mai întâi și apoi să o inițializăm:

// acest cod funcționează
int a;
a = 20;

// acest cod nu funcționează
var c;
c = 20;

În al doilea rând, nu putem indica valoarea null pentru o variabilă tipizată implicit:

// acest cod nu funcționează
var c = null;

Deoarece valoarea null nu oferă suficientă informație compilatorului pentru a deduce tipul de date.