Csharp/Generics

(Omdirigert fra «Csharp/Kapittel11»)

Generics

rediger

Generics er en funksjon laget for å støtte en generell funksjon i en funksjon eller objekt. Dette brukes hovedsaklig til å lage forskjellige collections eller lignende. De fleste generic klasser i .NET 2.0 ligger i System.Collections.Generic. Man kan skrive egne, ved å bruke haker etter objektnavnet, og fylle inn et eller flere navn på varierende datatyper, disse navnene må være unike. Ofte blir bare T brukt, men man kan skrive hva man vil, eller så mange man trenger i listen, skilt av komma.

public class MyGenericClass‹T›
{
 
}

T vil da fungere som en egen datatype, og bli erstattet når klassen blir tatt i bruk. Generics kan brukes på alle slags objektdefiniesjoner, fra funksjoner til klasser. For å instansiere en generisk klasse, bruker vi igjen hakene, men bytter ut T med en datatype som vi ønsker å bruke.

MyGenericClass‹float› my_class;

Et eksempel på en generic class

public class MyGenericArray‹T›
{
  T[] m_arr;
  public void Add(T value)
  {
    T[] new_arr = new T[m_arr.Length + 1];
    m_arr.CopyTo(new_arr, 0);
    m_arr = new_arr;
    m_arr[m_arr.Length - 1] = value;
  }
  public void Clear()
  {
    m_arr = new T[] { };
  }
  public MyGenericArray()
  {
    Clear();
  }
  public T this[int index]
  {
    get { return m_arr[index]; }
    set { m_arr[index] = value; }
  }
}

Generics brukes også til IEnumerable[1] klassen, som gjør at man kan bruke foreach på et egendefinert objekt.

  1. http://msdn2.microsoft.com/en-us/library/9eekhta0.aspx