CS-Opas:Generics

Mureakuha

Loikkaa: valikkoon, hakuun

Sisällysluettelo

Geneeriset tyypit

Geneerisillä tyypeillä voidaan kertoa luokan jäsenille yms. luokka mitä ne edustaa. Eniten tarvetta geneerisille tyypeille on tarvetta taulukoiden johdannaisten kanssa. Tälläisiä luokkia on .NET Framework 2.0 kirjoitettu muutamia lisää ne löytyvät System.Collections.Generic nimiavaruudesta.

Esimerkki SortedListin käytöstä

SortedList<string,henkilo> sl = new SortedList<string,henkilo>();
Henkilo h = new Henkilo("Teuvo",21);
sl.Add(h.nimi,h);
h = new Henkilo("Kalle",24);
sl.Add(h.nimi,h);
h = sl["Kalle"];
Console.WriteLine("Nimi:{0}, ikä:{1}",h.nimi,h.ika);

Oman luokan tekeminen

public Omaluokka<A>
{
   public A tieto;
   public A foo()
   {
      return tieto;
   }
}
public static void Main()
{
   Omaluokka<string> ol = new Omaluokka<string>();
   Console.WriteLine(ol.foo());
}

Erikoisratkaisuja

Seuraavan, jos asian paremmin ymmärtävä osaisi kertoa, niin hyvä

Tämä artikkeli on tynkä. Voit auttaa Kuhaa täydentämällä tämän sivun tietoja.
class Lists<T,C>
    where T:new()
    where C:ICalculator<T>,new()
{
    public static T Sum(List<T> list)
    {
        Number<T,C> sum=new T();
        for(int i=0;i<list.Count;i++)
            sum+=list[i];
        return sum;
    }
}

"Hakkerointi"

Kuten edellä todettiin, että genericsit toimivat .NET Framework 2.0 versiossa. Sitä aikaisemmissa versioissa (= 1.1 ja 1.0) ne eivät toimi. Eräs tapa luoda genericsien kaltaisia luokkia aikaisemmissa versioissa on käyttää hyväksi perintää. Alempana on siitä esimerkki:

using System;
using System.Collections;
 
public class MyArrayList : ArrayList // peri ArrayList-collectionin ominaisuudet
{
    public MyArrayList this[int index] // kääntäjä varoittaa tästä
    {
        get { return base[index] as MyArrayList; }
        set { base[index] = value; }
    }
 
    public MyArrayList(int i)
    {
        bar = i;
    }
 
    public int bar;
}

Ja sitten käyttö onnistuu näin:

class MainClass
{		
	public static void Main()
	{
		MyArrayList foo = new MyArrayList();
		
		foo.Add(new MyArrayList(123));
		foo.Add(new MyArrayList(654));
		
		Console.WriteLine(foo[0].bar); // tulostaa 123
		Console.WriteLine(foo[1].bar); // tulostaa 654
	}
}
Henkilökohtaiset työkalut