C# - Statikus és példány tagok létrehozása, felhasználása

C# nyelv 12. rész

forráskód letöltése
Egy osztályon belül kétféle metódus, változó, egyéb tag lehet: statikus és példány. Ebben a cikkben ezek tulajdonságait, felhasználási lehetőségeit nézzük meg részletesebben.
Ha egy tagot statikusként deklarálunk, akkor arról tudnunk kell, hogy az egy olyan eleme lesz az adott osztálynak, mely minden egyes példányában egyszer van csak jelen. A statikus tagok használatához nem kell az adott osztályból egy példányt létrehoznunk, elegendő csak az osztályra hivatkoznunk és az máris használható. A példány tagok ennek pont az ellentéte: ahány példányt létrehozunk az adott osztályból a példány tag annyiszor létre is jön és csak ekkor használható, nem elegendő az osztályra hivatkozni.
Nézzük mindezt a gyakorlatban. Egy tag attól kezdve lesz statikus, hogy a deklarációja elé a static kulcsszót beírjuk. Alábbi példa osztályban a „b” változó statikus, az „a” változó példány lesz. Ettől kezdve „b” változónak adhatunk úgy értéket, hogy Teszt.a = 15; Ellentétben az „a” változóval, melynek csak úgy adhatunk értéket, ha előbb a Teszt osztályból létrehozunk egy példányt: Teszt teszt = new Teszt(); teszt.a = 15;
Fontos tudni, hogy a statikus „b” változóból csak egyetlen egy jön létre, akárhány példányban is hozzunk létre a Teszt osztályból változókat. Vagyis, ha van egy x és y változónk, mely Teszt osztály típusú, akkor az x.b és az y.b ugyanazon a memória címen lévő int típusú változót érik el.
Ha egy függvényt deklarálunk statikusként, akkor azt szintén használhatjuk anélkül, hogy létrehoznánk egy változót az osztályból. Fontos tudnunk, hogy egy statikus függvény az adott osztályból, csak statikusként deklarált változókat érhet el. Jelen példánál maradva a Function2 statikus függvény csak a „b” változót érheti el és nem használhatja az „a” példány változót. Ha a függvényünk nem statikus, mint a Function, akkor nincs ez a megkötés. Ebben az esetben mind a statikus, mind a példány változók elérhetők.
      public class Teszt
      {
        public int a = 1;
        public static int b = 2;
        public int Function()
        {
          return a + b;
        }
        public static int Function2()
        {
          //return a;
          return b;
        }
      }
Ha tehát létrehozunk egy példányt a Teszt osztályból, mondjuk t névvel, akkor a t.a = 10; értékadás megengedett. Viszont a t.b = 20; értékadás nem működik, mivel a „b” változó statikus. Hasonló a helyzet a függvényeknél. A t.Function elérhető, viszont a t.Function2 nem, mivel ez szintén statikus.
      protected void button1_Click (object sender, System.EventArgs e)
      {
        Teszt t = new Teszt();
        t.a = 10;
        //t.b = 20;
        listBox1.Items.Add(t.Function().ToString());
        //listBox1.Items.Add(t.Function2().ToString());
Nézzük, miként érhetjük el a statikus tagokat a Teszt függvényből. Ehhez nem kell egy-egy példányt létrehozni a Teszt osztályból, hanem egyszerűen csak a Teszt osztályon keresztül hivatkozni rájuk. Ebben az esetben persze nem érhetjük el a példány tagokat, hanem csak a „b” változót és a Function2 függvényt.
        //Teszt.a = 10;
        Teszt.b = 20;
        //listBox1.Items.Add(Teszt.Function().ToString());
        listBox1.Items.Add(Teszt.Function2().ToString());
      }

C# nyelv cikksorozat