C# - Típusok csoportjai a C# nyelvben

C# nyelv 2. rész

forráskód letöltése
Ebben a cikkben a C# nyelvben használható típusokkal csoportosításával foglalkozunk részletesebben. Megvizsgáljuk a két fő csoportot és ezek közötti különbséget.
A C#-ban két fő csoportra oszthatjuk a típusokat. Az egyik az érték típus, a másik a referencia típus. Az érték típus kategóriába tartoznak például az egész számok, típusa az int, vagy a karakteres típus a char és ezek társai, de még ide tartozik a felsorolt típus és a struktúra típusa is. A referencia típusba tartozik az osztály, az interfész, a képviselő és tömb típus. A fő különbség e két csoport között az, hogy amíg az érték típusok tárolják is az adatokat, addig a referencia típusok csak egy referenciát tárolnak az adott adatokról.
Tekintsük át ehhez az alábbi példát. Létrehozunk két érték típust, melyek egész számokat tárolnak. Ez lesz az a és b változó, melyek int típusúak. Az a-nak nullát adunk értékül, majd a b-nek értékül adjuk az a-t, ekkor b értéke is nulla lesz. A következő sorban viszont b-nek százat adunk értékül. Ekkor viszont csak b értéke változik meg, mivel ez egy érték típus, így az a változóról nem tárol referenciát, így ha egymásnak adjuk értékül őket, akkor csak az adatuk kerül átadásra.
      protected void button1_Click (object sender, System.EventArgs e)
      {
        int a = 0;
        int b = a;
        b = 100;
Második esetben létrehozunk két tömb típust i1 és i2 névvel. E két változó csak referenciát fog tárolni a tömb adatainak tényleges helyéről. Amikor tehát az i1-et hozzuk létre, akkor látható, hogy nem kap értéket egyik eleme sem. i2-t úgy hozzuk létre, hogy értékül adjuk az i1-et. Ezek után az i2 tömb két elemének adunk értékül két számot, a tizet és a húszat. Megfigyelhetjük, hogy ennek ellenére a ListBox-ban, amikor kiírjuk a változók értékeit, akkor az i1 elemei és az i2 elmei is azonos számot tartalmaznak, pedig értéket csak az i2 elemeinek adtunk. Ez pontosan a referencia típus miatt van. Amikor i2 értékül kapta az i1-et, akkor csak az i1 tömbre mutató érték került átadásra. Ezzel azt értük el, hogy az i1 és i2 is ugyanarra a memória helyre mutat, ahol a tömb két eleme tárolásra került.
        int[] i1 = new int[2];
        int[] i2 = i1;
        i2[0] = 10;
        i2[1] = 20;
        listBox1.Items.Add("a: " + a.ToString());
        listBox1.Items.Add("b: " + b.ToString());
        listBox1.Items.Add("i1[0]: " + i1[0].ToString());
        listBox1.Items.Add("i1[1]: " + i1[1].ToString());
        listBox1.Items.Add("i2[0]: " + i2[0].ToString());
        listBox1.Items.Add("i2[1]: " + i2[1].ToString());
      }

C# nyelv cikksorozat