Datakurser
Aktuell vecka: 48

Tillbaka till toppen

C# Klasser konstruktor

Inledning

Den enkla klassen från lektionen "Klasser grunder" såg ut på följande sätt:

class Elev
{
     //variabler (datamedlemmar)
     public string namn;
     public int points;
}

Konstruktor

Är en medlemsfunktion i en klass med samma namn som klassen. Den anropas när ett objekt ska skapas och de initierar ett objekt. Det kan finnas flera konstruktorer i en klass. Dessa skiljer sig åt genom olika antal argument och/eller olika argumentstyper. ("Överlagrade" konstruktorer.)
En speciell konstruktor är defaultkonstruktorn som inte har några argument. Om vi inte skriver någon konstruktor i vår klassdefinition så definieras automatiskt en defaultkonstruktor som inte gör något än att skapa ett tomt objekt.

En konstruktor ska ha samma namn som klassen.
Tag för vana att skriva konstruktornamnet med stor bokstav. Medans metodnamn börjar med liten bokstav.

Vi kan omdefiniera defaultkonstruktorn till att göra något och vi kan skapa egna konstruktorer.
Exempel på konstruktorer till vår klass:

public Elev ()
{
     namn="ingen";
     points=0;
}
public Elev( string n)
{
     namn=n;
     points=0;
}
public Elev( string n, int p )
{
     namn=n;
     points=p;
}

Vi skriver om det tidigare programmet lite :
• lägg till en omdefinierad defaultkonstruktor
• två överlagrade konstruktorer med olika argument
• samt skriv om huvudprogrammet lite

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Klassex3
{
     //---------------------------------------------------------------------
     class Elev
     {
          // här deklareras gömda (utanför objektet) variabler och metoder
          private string namn;
          private int points;

          // här deklareras synliga (utanför objektet) variabler och metoder
          public void skriv_in_data()
          {
               Console.Write(" Elevnamn: ");
               namn = Console.ReadLine();
               Console.Write(" Poäng: ");
               points = int.Parse(Console.ReadLine());
          }
          public void skriv_ut_data()
          {
               Console.WriteLine(" Elevnnamn: "+namn+" Poäng: "+points);
          }
          public void increase_points(int x)
          {
               points+=x;
          }
          // Konstruktorer
          public Elev()
          {
               namn = "ingen";
               points = 0;
          }
          public Elev(string n)
          {
               namn = n;
               points = 0;
          }
          public Elev(string n, int p)
          {
               namn = n;
               points = p;
          }
     }
     //---------------------------------------------------------------
     // HUVUDPROGRAMMET klassex3
     class Program
     {
          static void Main(string[] args)
          {
               //skapa objekten genom anrop till defaultkonstruktorn
               Elev e1 = new Elev();
               // skapa objekten genom anrop till konstruktorn med 1 argument
               Elev e2 = new Elev("Musse Pigg");
               // skapa objekten genom anrop till konstruktorn med 2 argument
               Elev e3 = new Elev("Kalle Anka", 34);
               e1.skriv_ut_data();
               e1.skriv_in_data();
               e1.skriv_ut_data();
               e1.increase_points(10);
               e1.skriv_ut_data();
               e2.skriv_ut_data();
               e3.skriv_ut_data();
               e3.increase_points(10);
               e3.skriv_ut_data();

               Console.ReadLine();
          }
     }
}

Destruktor, Garbage Collector

Destruktor är inget som behövs i C#. Det finns en inbyggd GC (Garbage Collector) som då och då samlar ihop alla objekt som inte är uppbokade av programmet och frigör minnesutrymme.

Källor