Főoldal » C# – Generikus osztályok, metódusok, kollekciók

C# – Generikus osztályok, metódusok, kollekciók

MEGOSZTÁS

Ha tetszett a cikk, akkor nyugodtan oszd meg ismerőseiddel, valószínű ők is örülni fognak neki.

Generikus típusok a .NET 2.0 óta jelen vannak a keretrendszer osztálykönyvtáraiban. A System.Collections.Generics névtérben találhatjuk meg őket. Ez a névtér számos osztályt és interfészt tartalmaz, amelyek lehetővé teszik előre meg nem határozott típusú objektumok tárolását. Nem meglepő, hogy számos nem generikus kollekcióhoz megtalálható a generikus párja is.

A nem generikus osztályokhoz hasonlóan a generikus osztályokat is megfelelő konstruktorukkal lehet példányosítani. Emellett meg kell adni azon objektumok típusát, amiket a kollekcióban tárolni szeretnénk. Például a System.Collections.Generic.List megköveteli a típus meghatározását, amilyen típusokkal a List működni fog. A következő példában látható, hogy ez tetszőleges típus lehet.

static void Main(string[] args)
{
   // Int értékeket tároló lista
   List i = new List();
   // Pont objektumokat tároló lista
   List pontok = new List();
   // Szemely objektumokat tároló lista.
   List szemelyek = new List();
}

Generikus metódusok létrehozásakor az a cél, hogy a létrehozott metódus minden lehetséges adattípussal működőképes legyen. A következő példában bemutatott Csere függvény két, pareméterben átadott referenciával végzi el azok tartalmának cseréjét:

static void Csere(ref T a, ref T b)
{
   Console.WriteLine(“A csere függvény a következő
   típussal lett meghívva: {0}”, typeof(T));
   T temp;
   temp = a;
   a = b;
   b = temp;
}

A csere függvény használata két int és két string értékkel:

static void Main(string[] args)
{
   int a = 10, b = 90;
   Console.WriteLine(“Csere előtt: {0}, {1}”, a, b);
   Csere(ref a, ref b);
   Console.WriteLine(“Csere után: {0}, {1}”, a, b);
   Console.WriteLine();
   string s1 = “Hello”, s2 = “There”;
   Console.WriteLine(“Csere előtt: {0} {1}!”, s1, s2);
   Swap(ref s1, ref s2);
   Console.WriteLine(“Csere után: {0} {1}!”, s1, s2);
   Console.ReadLine();
}

Generikus tárolók és függvények használata után nézzünk egy példát saját generikus struktúra létrehozására. A következő Pont struktúra két tetszőleges típusú értékkel képes működni valamint műveleteket végezni. A két adattagjához generikus property-ken keresztül férhetünk hozzá.

public struct Pont
{
   //privát adattagok
   private T xPos;
   private T yPos;
   public Pont(T xVal, T yVal)
   {
      xPos = xVal;
      yPos = yVal;
   }

   //X adattag property-je
   public T X
   {
      get { return xPos; }
      set { xPos = value; }
   } 

   //Y adattag property-je
   public T Y
   {
      get { return yPos; }
      set { yPos = value; }
   }

   public override string ToString()
   {
      return string.Format(“[{0}, {1}]”, xPos, yPos);
   }
}

A struktúra használata int és double értékekkel:

Point p = new Point(10, 10);
Point p2 = new Point(5.4, 3.3);

A következő példában egy saját generikus kollekció látható. Az osztály tartalmaz egy előre nem ismert típusú listát, valamint a lista kezeléséhez szükséges metódusokat.

public class Felhasznalok : IEnumerable
{
   private List felh = new List(); 

   //Felhasználó lekérdezése
   public T GetFelhasznalo(int pos)
   { return felh[pos]; } 

   //Felhasználó hozzáadása
   public void AddFelhasznalo(T c)
   { felh.Add(c); } 

   public void ClearFelhasznalok()
   { felh.Clear(); } 

   public int Count
   { get { return felh.Count; } } 

   // IEnumerable IEnumerable, ezért
   // a GetEnumerator() mindkét verzióját implementálni kell.
   IEnumerator IEnumerable.GetEnumerator()
   { return felh.GetEnumerator(); }
   IEnumerator IEnumerable.GetEnumerator()
   { return felh.GetEnumerator(); }
}

A Felhasznalok generikus tároló használata:

Felhasznalok f = new felhasznalok();
f.AddFelhasznalo(new Felhasznalo(“Bela”, 1986));
f.AddFelhasznalo(new Felhasznalo(“Zsofi”, 1988));
foreach (Felhasznalo felhasz in f)
{
  Console.WriteLine(“Név: {0}, Születési év: {1}”,
  c.Nev, c.Szulev);
}

Forrás: http://en.csharp-online.net

Írta: Sallai Máté

MEGOSZTÁS

Ha tetszett a cikk, akkor nyugodtan oszd meg ismerőseiddel, valószínű ők is örülni fognak neki.

HOZZÁSZÓLÁS

Ha nem hagy nyugodni az, amit a cikkben olvastál, akkor nyugodtan írd meg kérdésed vagy észrevételed kommentbe. Így szerzőnk könnyen tud neked válaszolni.

Vélemény, hozzászólás?