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).
- Väärtustüübid: Hoiustavad andmeid otse (nt
- Töökindlus: C# kasutab ranget tõeväärtuse tüüpi (
bool), mida ei saa automaatselt täisarvudeks teisendada, vältides nii levinud programmeerimisvigu (ntif (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
unsafekoodiplokkides.
Näidis:
- 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]