Andmetüüpid

C# on mitmeparadigmaline, Microsofti arendatud ja objektorienteeritud programmeerimiskeel. Selle peamised põhimõtted ja andmetüübid on:

  • Disainieesmärgid: Keel on loodud olema lihtne, kaasaegne ja üldotstarbeline. Olulisel kohal on tarkvaratehnilised printsiibid nagu tugev tüübikontroll, massiivi piiride kontroll ja automaatne mäluhaldus (garbage collection).
  • Ühtne tüübisüsteem (CTS): Kõik tüübid, sealhulgas primitiivid nagu täisarvud, põlvnevad klassist System.Object.
  • Andmetüübid:
    • Väärtustüübid: Hoiustavad andmeid otse (nt int, float, char, bool, decimal, struct).
    • Viitetüübid: Hoiustavad viidet mäluaadressile (nt object, string, Array, klassid).
  • Töökindlus: C# kasutab ranget tõeväärtuse tüüpi (bool), mida ei saa automaatselt täisarvudeks teisendada, vältides nii levinud programmeerimisvigu (nt if (a = b)).
  • Struktuur: Keeles puuduvad globaalsed muutujad ja funktsioonid; kogu kood peab asuma klasside sees.
  • Mälu: Toetab turvalist mäluhaldust, kusjuures otsene juurdepääs mäluaadressidele (pointerid) on lubatud ainult eraldi märgistatud unsafe koodiplokkides.

Näidis:

  1. Väärtustüübid (Value Types)
    Väärtustüübid hoiustavad andmeid otse ja neil on alati vaikeväärtus.
//Täisarv (32-bitine märgiga täisarv)
int vanus = 25; [1]

//Ujukomaarv (32-bitine) - nõuab 'f' sufiksit
float pikkus = 1.85f; [1]

//Kõrge täpsusega arv (finantsarvutusteks) - nõuab 'm' sufiksit
decimal hind = 99.99m; [1]

// Märk (16-bitine Unicode sümbol)
char esitäht = 'A'; [1]

// Tõeväärtus (ainult true või false)
bool onSisselogitud = true; [1, 2]

// Aeg ja kuupäev (nanosekundi täpsusega ajahetk)
System.DateTime praegu = System.DateTime.Now; [1]

2. Viitetüübid (Reference Types)

Viitetüübid hoiustavad viidet (mäluaadressi) objektile

//Sõne (Unicode märkide jada)
string tervitus = "Tere, maailm!"; [3]

//Objekt (kõigi teiste tüüpide ülemklass)
object suvaline = 42; [3]

//Massiiv (sama tüüpi andmete jada)
int[] numbrid = { 1, 2, 3, 4, 5 }; [3, 4]

3. Kaudne ja dünaamiline tüüpimine

C# võimaldab kasutada märksõnu, kus tüübi määrab kompileerija või süsteem tööajal.

//Kaudne tüüpimine (kompileerija tuletab tüübi väärtuse põhjal)
var nimi = "Juhan"; // Tüübiks saab string [5]

//Dünaamiline tüüpimine (tüübi kontroll toimub programmi tööajal)
dynamic muutuja = 10; [6]
muutuja = "Nüüd olen tekst"; [6]

4. Poksimine ja lahtipoksimine (Boxing and Unboxing)

See on operatsioon väärtustüübi konverteerimiseks viitetüübiks ja tagasi.

int arv = 123;
//Poksimine: int (väärtustüüp) teisendatakse objektiks (viitetüüp)
object objekt = arv; [7]

//Lahtipoksimine: nõuab selget tüübiteisendust (cast)
int tagasiArvuks = (int)objekt; [7]