Klasskonstruktorer
En klasskonstruktor är detsamma som en strukturkonstruktor. Det är en metod som körs när ett objekt skapas.
Syntaxen för att skapa en konstruktor är följande:
index.cs
1234567class className { // ... other class code public className() { // code } }
Till exempel:
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 från utdata att Console.WriteLine
-satsen inuti Player
-konstruktorn körs varje gång ett nytt objekt skapas.
I C# 9 och äldre versioner av C# finns det vissa skillnader mellan konstruktorer för struct och klass. Till exempel kan du i äldre versioner inte skapa parameterlösa konstruktorer för Structs, men i C# 10 och nyare versioner stöds detta. Det rekommenderas att använda den senaste versionen av C#-kompilatorer, annars kan du stöta på vissa fel vid kompilering av viss kod.
Följande är ett exempel från kapitlet Struct Constructors. Begreppet static
förklaras i kommentarerna eftersom det är mer relevant här, men det är inte nödvändigt att helt förstå det nu eftersom detta koncept kommer att förklaras mer ingående i senare avsnitt.
Till skillnad från vanliga fält kan ett static-fält lagra data även om det inte finns något objekt av klassen. Statisk fält har samma värde för alla objekt, vilket innebär att en ändring av ett statiskt fält från ett objekt ändrar det för alla objekt. Programklassen representerar själva programmet, så om det statiska fältet är en medlem i 'Program'-klassen fungerar 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(); } }
För att konvertera Player
-strukturen till en klass, behöver du bara ändra termen struct
till 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å liknande sätt kan du även ha konstruktorer med vissa argument. Vanligtvis används denna metod för att förenkla initieringen av klassfält:
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(); } }
Vid det här laget har du gått igenom de flesta grundläggande koncepten för Classes
, och utifrån syntax och beteende verkar Classes
vara exakt samma som Structs
, men så är faktiskt inte fallet. Som nämnts i det första kapitlet i denna sektion är Strukturer en begränsad version av Klasser som endast tillhandahåller grundläggande funktionalitet, medan Klassernas funktioner är mycket mer komplexa och omfattande. I denna sektion har du gått igenom alla funktioner som är gemensamma mellan Classes
och Structs
. I de två nästa sektionerna kommer du att lära dig alla detaljer kring klasser och objektorienterad programmering.
1. När anropas en konstruktormetod?
2. Vad kommer konstruktörsmetoden att heta i en klass som heter "Animal"?
3. Vilket nyckelord används före konstruktörens namn?
Tack för dina kommentarer!
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal
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
Klasskonstruktorer
Svep för att visa menyn
En klasskonstruktor är detsamma som en strukturkonstruktor. Det är en metod som körs när ett objekt skapas.
Syntaxen för att skapa en konstruktor är följande:
index.cs
1234567class className { // ... other class code public className() { // code } }
Till exempel:
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 från utdata att Console.WriteLine
-satsen inuti Player
-konstruktorn körs varje gång ett nytt objekt skapas.
I C# 9 och äldre versioner av C# finns det vissa skillnader mellan konstruktorer för struct och klass. Till exempel kan du i äldre versioner inte skapa parameterlösa konstruktorer för Structs, men i C# 10 och nyare versioner stöds detta. Det rekommenderas att använda den senaste versionen av C#-kompilatorer, annars kan du stöta på vissa fel vid kompilering av viss kod.
Följande är ett exempel från kapitlet Struct Constructors. Begreppet static
förklaras i kommentarerna eftersom det är mer relevant här, men det är inte nödvändigt att helt förstå det nu eftersom detta koncept kommer att förklaras mer ingående i senare avsnitt.
Till skillnad från vanliga fält kan ett static-fält lagra data även om det inte finns något objekt av klassen. Statisk fält har samma värde för alla objekt, vilket innebär att en ändring av ett statiskt fält från ett objekt ändrar det för alla objekt. Programklassen representerar själva programmet, så om det statiska fältet är en medlem i 'Program'-klassen fungerar 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(); } }
För att konvertera Player
-strukturen till en klass, behöver du bara ändra termen struct
till 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å liknande sätt kan du även ha konstruktorer med vissa argument. Vanligtvis används denna metod för att förenkla initieringen av klassfält:
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(); } }
Vid det här laget har du gått igenom de flesta grundläggande koncepten för Classes
, och utifrån syntax och beteende verkar Classes
vara exakt samma som Structs
, men så är faktiskt inte fallet. Som nämnts i det första kapitlet i denna sektion är Strukturer en begränsad version av Klasser som endast tillhandahåller grundläggande funktionalitet, medan Klassernas funktioner är mycket mer komplexa och omfattande. I denna sektion har du gått igenom alla funktioner som är gemensamma mellan Classes
och Structs
. I de två nästa sektionerna kommer du att lära dig alla detaljer kring klasser och objektorienterad programmering.
1. När anropas en konstruktormetod?
2. Vad kommer konstruktörsmetoden att heta i en klass som heter "Animal"?
3. Vilket nyckelord används före konstruktörens namn?
Tack för dina kommentarer!