Hopp til innhold

Csharp/Constructors og destructors

Fra Wikibøker – frie læremidler
(Omdirigert fra «Csharp/Kapittel13»)

Constructors og destructors

[rediger]

Constructor

[rediger]

Constructors er funksjoner med samme navn som klassen, og skal ikke ha noen som helst returverdi. Det disse gjør, er å sette opp verdiene i klassen etter eventuelle parameter som blir gitt til funksjonen. Disse funksjonene er synlige når man bruker operator new.

public struct CustomPoint
{
  private int m_x; // Variabelen som inneholder X
  private int m_y; // Variabelen som inneholder Y
  public int X
  {
    get
    {
      return m_x;
    }
    set
    {
      m_x = value;
    }
  }
  public int Y
  {
    get
    {
      return m_y;
    }
    set
    {
      m_y = value;
    }
  }
 
  public CustomPoint(int x, int y)
  {
    // I en struktur, må alle egenskaper få en verdi
    m_x = x;
    m_y = y;
  }
}

Her definerer vi en constructor, som tar x og y som parameter, dette gjør at vi nå kan kalle denne funksjonen hver gang vi vil lage et nytt CustomPoint, framfor å lage en CustomPoint variabel og sette verdiene selv.

public void main()
{
  CustomPoint p = new CustomPoint(32, 32);
}

I motsetning til class, kan ikke structs ha en constructor uten parameter, dessuten må 'alle' felt tilegnes en verdi i løpet av constructoren. Dette er av samme grunn som at man ikke kan bruke en variabel ellers i programmet uten først å gi den en verdi, for som sagt tidligere, så vil en variabel som ikke er spesifikt gitt en verdi, ha en tilfeldig verdi.

Constructors er veldig kjekt hvis man vil gi klasser eller strukturer som parameter i en funksjon, så en slipper å definere en variabel for å kun bruke det som et parameter i en funksjon.

Destructor

[rediger]

Destructors er funksjoner som skal ta seg av trygg fjerning av verdier og objekter, men siden destructors ikke er garantert at blir kalt, vil du sjeldent, eller aldri bruke dem. Uansett så deklareres destructors ved å gi tegnet tilde, ~ etterfulgt av navnet på klassen. Destructors skal ikke ha noen access modifier.

public class MyClass
{
  public int variable;
  public MyClass(int i)
  {
    variable = i;
  }
  ~MyClass()
  {
    // Dette er helt unødvendig kode, og er laget kun for å illustrere destructors.
    variable = 0;
  }
}

Men siden disse ikke alltid blir kalt, bruker vi et interface som heter IDisposable i de få tilfellene dette er nødvendig, som ofte er ved bruk av native funksjoner, eller databaser.