CS-Opas:Generics
Mureakuha
Sisällysluettelo |
[muokkaa]
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.
[muokkaa]
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);
[muokkaa]
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()); }
[muokkaa]
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; } }
[muokkaa]
"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 } }
