Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Klassekonstruktører | Introduksjon til Objektorientert Programmering (OOP)
C# Utover Det Grunnleggende

bookKlassekonstruktører

En klassekonstruktør er det samme som en strukturkonstruktør. Det er en metode som kjøres når et objekt opprettes.

Syntaksen for å lage en konstruktør er følgende:

index.cs

index.cs

copy
1234567
class className { // ... other class code public className() { // code } }

For eksempel:

index.cs

index.cs

copy
1234567891011121314151617
using System; class Player { public Player() { Console.WriteLine("A new player is created"); } } public class HelloWorld { public static void Main(string[] args) { Player p1 = new Player(); Player p2 = new Player(); Player p3 = new Player(); } }

Du kan se fra utdataene at Console.WriteLine-setningen inne i Player-konstruktøren kjøres hver gang et nytt objekt opprettes.

Note
Merk

I C# 9 og eldre versjoner av C# finnes det noen forskjeller mellom konstruktører for structs og klasser. For eksempel, i eldre versjoner kan du ikke opprette parameterløse konstruktører for structs, men i C# 10 og nyere versjoner er dette støttet. Det anbefales å bruke den nyeste versjonen av C#-kompilatorer, ellers kan du oppleve feil under kompilering av noe av koden.

Følgende er et eksempel på kode fra kapitlet Strukt-konstruktører. Begrepet static forklares i kommentarene, da det er mer relevant her, men det er ikke nødvendig å forstå det fullt ut nå, siden dette konseptet vil bli forklart i detalj i senere seksjoner.

Note
Merk

I motsetning til vanlige felt, kan et statisk felt lagre data selv om det ikke finnes noe objekt av klassen. Statiske felt har samme verdi for alle objekter, derfor vil endring av verdien til et statisk felt fra ett objekt endre det for alle objekter. Programklassen representerer selve programmet, så hvis det statiske feltet er et medlem av 'Program'-klassen, fungerer det som en global variabel.

index.cs

index.cs

copy
1234567891011121314151617181920212223
using System; struct Program { public static int totalPlayers = 0; struct Player { public int id; public Player() { id = totalPlayers++; Console.WriteLine($"New Player Object Created With ID {id}"); } } static void Main(string[] args) { Player player1 = new Player(); Player player2 = new Player(); Player player3 = new Player(); } }

For å konvertere Player-strukturen til en klasse, trenger du bare å endre begrepet struct til class:

index.cs

index.cs

copy
12345678910111213141516171819202122232425262728
using System; class Program { // Unlike normal fields, a 'static' field can hold data even if there's no object. // Static fields have the same value for all objects. // Changing the value of a static field from one object changes it for all objects. // In this case the static field is part of the 'Program' class which represents the program itself // Therefore this field is essentially a global variable public static int totalPlayers = 0; struct Player { public int id; public Player() { id = totalPlayers++; Console.WriteLine($"New Player Object Created With ID {id}"); } } static void Main(string[] args) { Player player1 = new Player(); Player player2 = new Player(); Player player3 = new Player(); } }

På samme måte kan du ha konstruktører med noen argumenter også. Vanligvis brukes denne metoden for å gjøre initialiseringen av klassefelt enklere:

index.cs

index.cs

copy
12345678910111213141516171819202122232425262728
using System; class Point { public double x; public double y; public Point(double x, double y) { // 'this' keyword is also used in classes just like how its used in structs this.x = x; this.y = y; } public void showCoordinates() { Console.WriteLine($"({x}, {y})"); } } class Program { static void Main(string[] args) { Point p1 = new Point(50, 70); Point p2 = new Point(70, 90); p1.showCoordinates(); p2.showCoordinates(); } }

På dette tidspunktet har du dekket de fleste grunnleggende konsepter for Classes, og ut fra syntaks og oppførsel kan det virke som om Classes og Structs er helt like. Dette er imidlertid ikke tilfelle. Som nevnt i det første kapittelet i denne seksjonen, er Structs en begrenset versjon av Klasser som kun tilbyr grunnleggende funksjonalitet, mens Klasser har langt mer komplekse og omfattende egenskaper. I denne seksjonen har du gått gjennom alle funksjonene som er like mellom Classes og Structs. I de neste to seksjonene vil du lære alle detaljene om klasser og objektorientert programmering.

1. Når kalles en konstruktørmetode?

2. Hva vil navnet på en konstruktørmetode i en klasse kalt "Animal" være?

3. Hvilket nøkkelord brukes foran navnet på en konstruktør?

question mark

Når kalles en konstruktørmetode?

Select the correct answer

question mark

Hva vil navnet på en konstruktørmetode i en klasse kalt "Animal" være?

Select the correct answer

question mark

Hvilket nøkkelord brukes foran navnet på en konstruktør?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 3. Kapittel 9

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

Suggested prompts:

Can you explain the main differences between classes and structs?

What are some advanced features of classes that structs don't have?

Can you give examples of when to use a class instead of a struct?

Awesome!

Completion rate improved to 2.04

bookKlassekonstruktører

Sveip for å vise menyen

En klassekonstruktør er det samme som en strukturkonstruktør. Det er en metode som kjøres når et objekt opprettes.

Syntaksen for å lage en konstruktør er følgende:

index.cs

index.cs

copy
1234567
class className { // ... other class code public className() { // code } }

For eksempel:

index.cs

index.cs

copy
1234567891011121314151617
using System; class Player { public Player() { Console.WriteLine("A new player is created"); } } public class HelloWorld { public static void Main(string[] args) { Player p1 = new Player(); Player p2 = new Player(); Player p3 = new Player(); } }

Du kan se fra utdataene at Console.WriteLine-setningen inne i Player-konstruktøren kjøres hver gang et nytt objekt opprettes.

Note
Merk

I C# 9 og eldre versjoner av C# finnes det noen forskjeller mellom konstruktører for structs og klasser. For eksempel, i eldre versjoner kan du ikke opprette parameterløse konstruktører for structs, men i C# 10 og nyere versjoner er dette støttet. Det anbefales å bruke den nyeste versjonen av C#-kompilatorer, ellers kan du oppleve feil under kompilering av noe av koden.

Følgende er et eksempel på kode fra kapitlet Strukt-konstruktører. Begrepet static forklares i kommentarene, da det er mer relevant her, men det er ikke nødvendig å forstå det fullt ut nå, siden dette konseptet vil bli forklart i detalj i senere seksjoner.

Note
Merk

I motsetning til vanlige felt, kan et statisk felt lagre data selv om det ikke finnes noe objekt av klassen. Statiske felt har samme verdi for alle objekter, derfor vil endring av verdien til et statisk felt fra ett objekt endre det for alle objekter. Programklassen representerer selve programmet, så hvis det statiske feltet er et medlem av 'Program'-klassen, fungerer det som en global variabel.

index.cs

index.cs

copy
1234567891011121314151617181920212223
using System; struct Program { public static int totalPlayers = 0; struct Player { public int id; public Player() { id = totalPlayers++; Console.WriteLine($"New Player Object Created With ID {id}"); } } static void Main(string[] args) { Player player1 = new Player(); Player player2 = new Player(); Player player3 = new Player(); } }

For å konvertere Player-strukturen til en klasse, trenger du bare å endre begrepet struct til class:

index.cs

index.cs

copy
12345678910111213141516171819202122232425262728
using System; class Program { // Unlike normal fields, a 'static' field can hold data even if there's no object. // Static fields have the same value for all objects. // Changing the value of a static field from one object changes it for all objects. // In this case the static field is part of the 'Program' class which represents the program itself // Therefore this field is essentially a global variable public static int totalPlayers = 0; struct Player { public int id; public Player() { id = totalPlayers++; Console.WriteLine($"New Player Object Created With ID {id}"); } } static void Main(string[] args) { Player player1 = new Player(); Player player2 = new Player(); Player player3 = new Player(); } }

På samme måte kan du ha konstruktører med noen argumenter også. Vanligvis brukes denne metoden for å gjøre initialiseringen av klassefelt enklere:

index.cs

index.cs

copy
12345678910111213141516171819202122232425262728
using System; class Point { public double x; public double y; public Point(double x, double y) { // 'this' keyword is also used in classes just like how its used in structs this.x = x; this.y = y; } public void showCoordinates() { Console.WriteLine($"({x}, {y})"); } } class Program { static void Main(string[] args) { Point p1 = new Point(50, 70); Point p2 = new Point(70, 90); p1.showCoordinates(); p2.showCoordinates(); } }

På dette tidspunktet har du dekket de fleste grunnleggende konsepter for Classes, og ut fra syntaks og oppførsel kan det virke som om Classes og Structs er helt like. Dette er imidlertid ikke tilfelle. Som nevnt i det første kapittelet i denne seksjonen, er Structs en begrenset versjon av Klasser som kun tilbyr grunnleggende funksjonalitet, mens Klasser har langt mer komplekse og omfattende egenskaper. I denne seksjonen har du gått gjennom alle funksjonene som er like mellom Classes og Structs. I de neste to seksjonene vil du lære alle detaljene om klasser og objektorientert programmering.

1. Når kalles en konstruktørmetode?

2. Hva vil navnet på en konstruktørmetode i en klasse kalt "Animal" være?

3. Hvilket nøkkelord brukes foran navnet på en konstruktør?

question mark

Når kalles en konstruktørmetode?

Select the correct answer

question mark

Hva vil navnet på en konstruktørmetode i en klasse kalt "Animal" være?

Select the correct answer

question mark

Hvilket nøkkelord brukes foran navnet på en konstruktør?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 3. Kapittel 9
some-alt