Klassekonstruktø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
1234567class className { // ... other class code public className() { // code } }
For eksempel:
index.cs
1234567891011121314151617using 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.
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.
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
1234567891011121314151617181920212223using 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
12345678910111213141516171819202122232425262728using 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
12345678910111213141516171819202122232425262728using 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?
Tak for dine kommentarer!
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat
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
Klassekonstruktø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
1234567class className { // ... other class code public className() { // code } }
For eksempel:
index.cs
1234567891011121314151617using 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.
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.
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
1234567891011121314151617181920212223using 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
12345678910111213141516171819202122232425262728using 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
12345678910111213141516171819202122232425262728using 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?
Tak for dine kommentarer!