C# Klasser konstruktor
Inledning
Den enkla klassen från lektionen "Klasser grunder" såg ut på följande sätt:
{
//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:
{
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.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