Limbajul C# include doua categorii de tipuri de date : tipuri valorice si tipuri referinta.
Pentru ca C# respecta un domeniu de valori si fiecare tip valoric are un comportament, limbajul asigura portabilitate. De exemplu, o variabila declarata de tip int va ramane tot de tip int, indiferent de mediul de executie. Acest lucru ne ajuta la evitarea rescrierii codului pentru adaptarea programului la o anumita platforma.
Conform MSDN, tipurile valoare se clasifica astfel :
I – Tipul structura – care cuprinde :
Tipuri numerice
Intregi
In C# sunt definite 9 tipuri de intregi : char, byte, sbyte, short, ushort, int, uint, long, ulong. Cu exceptia lui char, toate sunt folosite la calcule numerice.
Variabilele de tip int se utilizeaza in controlul buclelor, indexarea tablourilor, aritmetica normala cu numere intregi. Se recomanda ca atunci cand e nevoie de o valoare ( fara semn ) care depaseste domeniul lui int,sa se foloseasca uint. In cazul valorilor mari este recomandat long, iar la cele fara semn, ulong.
//declararea unui int cu valoare implicita 0 int aria; //un alt mod de a declara un int int latime = new int(); //atribuire valoare pentru variabila latime latime = 30; //declarare si initializare int lungime = 40; //CALCUL ARIA aria = latime * lungime; //Afisarea rezultatului in consola Console.Write("Aria este {0} metri patrati.", aria);
In virgula mobila
Tipurile in virgula mobila, se utilizeaza pentru reprezentarea numerelor care au parte fractionara. Exista doua tipuri : float, double. Acesta din urma, este cel mai intrebuintat.
//declararea unui double cu valoare implicita 0 double mediaAn; //declarea si initializare double mediaSemUnu = 8.45; //un alt mod de a declara un tip double double mediaSemDoi = new double(); //atribuire valoare pentru variabila mediaSemDoi mediaSemDoi = 9.65; //CALCUL MEDIA mediaAn = (mediaSemUnu + mediaSemDoi) / 2; //afisarea rezultatului in consola Console.WriteLine("Media anuala este {0}", mediaAn);
Decimal
Tipul decimal este folosit in calculele monetare. El are avantajul ca elimina erorile de rotunjire atunci cand se lucreaza cu valori fractionare, pentru ca poate reprezenta in mod precis pana la 28 de pozitii zecimale. Tipul decimal nu exista in C, C++, Java.
//variabile de tip decimal,in declarare, trebuie urmate de m sau M //declarea unei variabile decimal cu valoare implicita 0.0M decimal sold = 1000.10m; //un alt mod de a declara o variabila decimal decimal dobanda = new decimal(); dobanda = 0.1m; //CALCUL SOLD NOU sold = sold + sold * dobanda; //afisarea in consola a rezultatului Console.WriteLine("Noul sold este {0} USD ", sold);
Tipuri Bool
Tipul bool retine valorile de adevar ( “true” ) si fals ( “false” ). Orice expresie de tipul bool va lua una din aceste valori. Nu se poate converti. Teora
bool a; a = false; Console.WriteLine("a este {0}", a); bool b; b = true; Console.WriteLine("b este {0}", b);
Caractere
In C#, pentru caractere, se utilizeaza modelul Unicode.
//declararea unei variabile char cu valoare implicita '\0' char ch; ch = 'b'; //afisarea valorii din standardul UNICODE pentru un caracter //are loc conversia catre un int Console.WriteLine("Valoarea lui {0} in standardul UNICODE este {1}",ch,(int)ch);
II Structura – tip valoare propriu
Este asemantor cu cel din C++. Pentru ca este un tip valoric, va fi stocata in stiva. Atat timp cat structura este rezonabila in ceea ce priveste marimea, nu vor fi probleme cu administrarea memoriei.
O structura poate contine declaratii de constante, campuri, metode, proprietati, indexatori, operatori, constructori.
Cele mai simple structuri, sunt System.Int32, System.Int64, System.Single, etc, pentru tipurile de baza int, long, float.
struct Persoana
{
public string nume;
public string prenume;
public int varsta;
}
III – Tipul enumerare
Tipul enumerare se defineste de programator si se aseamana cu cel din C++. Acest tip permite folosirea numelor carora li se atribuie o valoare.
Este recomandat sa declaram si sa definim o enumerare direct in interiorul unui spatiu de nume, pentru a putea fi folosita de toate clasele.
Sintaxa pentru a defini o enumerare este :
[atribute] [modificatori] enum NumeEnum : [tip]
In cazul in care nu se specifica tipul enumerarii, acesta este considera implicit int. ( [] – optional )
namespace tipulEnum { enum ZileSaptamana { Luni = 1, Marti, Miercuri, Joi, Vineri, Sambata, Duminica } }
Un exemplu de folosire a acestei enumerari este :
Console.WriteLine("Miercuri este a {0} zi din saptamana ", (int)tipulEnum.ZileSaptamana.Miercuri);
Pentru a converti un tip string, de exemplu avem numele zilei, in Enum, se procedeaza in felul urmator:
ZileSaptamana zi = (ZileSaptamana) Enum.Parse(typeof(ZileSaptamana), "Miercuri");
Observatii:
Implicit, valoare primului membru din enumerare este 0. Pentru un exemplu simplu si practic, initializat variabila ‘Luni’ cu 1; Apoi, fiecare variabila care va urma va avea o valoare implicita mai mare decat precendenta, cu o unitate.
Daca nu foloseam conversia in exemplu ( int ), rezultatul ar fi aratat numele elementului.
Tipurile enum sunt derivate din clasa System.Enum, derivata din System.ValueType.
Tipurile nullable
Sunt tipuri valoare pentru care se pot memora valori posibile din aria tipurilor de baza, inclusiv valoare null.
Valoarea unei variabile contine valoarea implicita a tipului, daca nu este initializata explicit. Exista cazuri, in care se doreste ca valoarea implicita a variabilei sa nu fie definita.
Se foloseste structura System.Nullable <T>, T este un tip valoare , astfel :
Nullable<int> a ;
Un alt mod de a declara o variabila de acest tip este: int? a = null; iar verificarea se poate face in felul urmator: Console.WriteLine(“valoarea variabilei este {0}”, a ?? “null”);
Pingback/Trackback
Valoare vs. referinta (I) | by zeltera