Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Klassekonstruktører | Introduktion til Objektorienteret Programmering (OOP)
C# Ud Over Det Grundlæggende

bookKlassekonstruktører

En klassekonstruktør er det samme som en strukturkonstruktør. Det er en metode, der udføres, når et objekt oprettes.

Syntaksen for at oprette 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 outputtet, at Console.WriteLine-sætningen inde i Player-konstruktøren bliver udført hver gang et nyt objekt oprettes.

Note
Bemærk

I C# 9 og ældre versioner af C# er der nogle forskelle mellem konstruktører for structs og klasser. For eksempel kan du i ældre versioner ikke oprette parameterløse konstruktører for structs, men i C# 10 og nyere versioner er det understøttet. Det anbefales at bruge den nyeste version af C#-kompilatorer, ellers kan du opleve fejl under kompilering af noget af koden.

Følgende er et eksempel på kode fra kapitlet Struct Constructors. Begrebet static forklares i kommentarerne, da det er mere relevant her, men det er ikke nødvendigt at forstå det fuldstændigt, da dette koncept vil blive gennemgået mere detaljeret i senere afsnit.

Note
Bemærk

I modsætning til normale felter kan et static felt indeholde data, selvom der ikke findes et objekt af klassen. Statiske felter har samme værdi for alle objekter, så hvis værdien ændres fra ét objekt, ændres den for alle objekter. Programklassen repræsenterer selve programmet, så hvis det statiske felt er medlem af '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 at konvertere Player-strukturen til en klasse, skal du blot ændre betegnelsen 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åde kan du også have konstruktører med nogle argumenter. Denne metode bruges typisk til at gøre initialiseringen af klassefelter nemmere:

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 tidspunkt har du gennemgået de fleste af de grundlæggende begreber for Classes, og ud fra syntaksen og opførslen ser Classes ud til at være nøjagtig det samme som Structs, men det er faktisk ikke tilfældet. Som nævnt i det første kapitel af dette afsnit, er Structs en begrænset version af Klasser, der kun tilbyder grundlæggende funktionalitet, hvorimod Klasser har langt mere komplekse og omfattende funktioner. I dette afsnit har du gennemgået alle de funktioner, der er ens mellem Classes og Structs. I de næste to afsnit vil du lære alle detaljerne om klasser og objektorienteret programmering.

1. Hvornår kaldes en konstruktørmetode?

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

3. Hvilket nøgleord bruges før et konstruktørnavn?

question mark

Hvornår kaldes en konstruktørmetode?

Select the correct answer

question mark

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

Select the correct answer

question mark

Hvilket nøgleord bruges før et konstruktørnavn?

Select the correct answer

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 3. Kapitel 9

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

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

Stryg for at vise menuen

En klassekonstruktør er det samme som en strukturkonstruktør. Det er en metode, der udføres, når et objekt oprettes.

Syntaksen for at oprette 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 outputtet, at Console.WriteLine-sætningen inde i Player-konstruktøren bliver udført hver gang et nyt objekt oprettes.

Note
Bemærk

I C# 9 og ældre versioner af C# er der nogle forskelle mellem konstruktører for structs og klasser. For eksempel kan du i ældre versioner ikke oprette parameterløse konstruktører for structs, men i C# 10 og nyere versioner er det understøttet. Det anbefales at bruge den nyeste version af C#-kompilatorer, ellers kan du opleve fejl under kompilering af noget af koden.

Følgende er et eksempel på kode fra kapitlet Struct Constructors. Begrebet static forklares i kommentarerne, da det er mere relevant her, men det er ikke nødvendigt at forstå det fuldstændigt, da dette koncept vil blive gennemgået mere detaljeret i senere afsnit.

Note
Bemærk

I modsætning til normale felter kan et static felt indeholde data, selvom der ikke findes et objekt af klassen. Statiske felter har samme værdi for alle objekter, så hvis værdien ændres fra ét objekt, ændres den for alle objekter. Programklassen repræsenterer selve programmet, så hvis det statiske felt er medlem af '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 at konvertere Player-strukturen til en klasse, skal du blot ændre betegnelsen 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åde kan du også have konstruktører med nogle argumenter. Denne metode bruges typisk til at gøre initialiseringen af klassefelter nemmere:

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 tidspunkt har du gennemgået de fleste af de grundlæggende begreber for Classes, og ud fra syntaksen og opførslen ser Classes ud til at være nøjagtig det samme som Structs, men det er faktisk ikke tilfældet. Som nævnt i det første kapitel af dette afsnit, er Structs en begrænset version af Klasser, der kun tilbyder grundlæggende funktionalitet, hvorimod Klasser har langt mere komplekse og omfattende funktioner. I dette afsnit har du gennemgået alle de funktioner, der er ens mellem Classes og Structs. I de næste to afsnit vil du lære alle detaljerne om klasser og objektorienteret programmering.

1. Hvornår kaldes en konstruktørmetode?

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

3. Hvilket nøgleord bruges før et konstruktørnavn?

question mark

Hvornår kaldes en konstruktørmetode?

Select the correct answer

question mark

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

Select the correct answer

question mark

Hvilket nøgleord bruges før et konstruktørnavn?

Select the correct answer

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 3. Kapitel 9
some-alt