Konstruktorer
En konstruktor är en metod som anropas automatiskt när en instans skapas. Den skrivs in i klassen som en publik metod utan returtyp och med samma namn som klassen.
När man skapar en instans av klassen Fighter så ges instansen nu enligt koden ovan ett slumpat strength-värde.
Parametrar och konstruktorer
Precis som andra metoder kan konstruktorer ta emot en eller flera parametrar. Det brukar till exempel användas som ett snabbt och enkelt sätt att skjuta in information som ska lagras i instansens variabler.
Kontruktorer som anropar varandra (this)
Om man har flera konstruktorer så väljs vilken som körs genom samma principer som annan metod-överlagring. Vill man själv kalla på en annan konstruktor så kan man göra detta genom att skriva :this() efter konstruktorns parenteser. Mellan de nya parenteserna lägger man de värden som ska passeras till önskad konstruktor.
Konstruktorer i arv
När en basklass och en subklass har varsin konstruktor så kommer båda konstruktorerna att köras när en instans av subklassen skapas. Först körs basklassens konstruktor, därefter körs subklassens konstruktor.
I exemplet ovan kommer med andra ord en instans av Thief först 100 i hp när basklassens konstruktor körs, och sedan ändras hp till 20 och name till "Thief".
Konstruktorer med parametrar i arv
Etersom både basklassens och subklassens konstruktor körs, så betyder det att om basklassens konstruktor kräver ett parametervärde så måste det värdet stoppas in på något sätt även när det är subklassen som instansieras.
I exemplet nedan måste Character-klassens konstruktor få ett string-värde som parameter.
För att ange vilket värde som ska skickas till basklassens konstruktor så använder man base().
Man kan också skicka vidare värden från subklassens konstruktor-parametrar till basklassens konstruktor.
Här tar subklassens konstruktor emot två parametrar - na och h - och skickar vidare värdet som lagras i parametern na till basklassens konstruktor.
Primära konstruktorer (.net 8)
I dotnet 8 introduceras primary constructors – de gör att man kan stoppa in parametervärden in i klassen utan att explicit skapa en konstruktor.
Om man då stoppar in andra, vanliga konstruktorer så måste man modifiera dem så att de matar "primärkonstruktorn" med rätt data.
Last updated