Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Klasskonstruktorer | Introduktion till Objektorienterad Programmering (OOP)
C# Bortom Grunderna

bookKlasskonstruktorer

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

index.cs

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

Till exempel:

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 från utdata att Console.WriteLine-satsen inuti Player-konstruktorn körs varje gång ett nytt objekt skapas.

Note
Notera

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.

Note
Notera

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

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(); } }

För att konvertera Player-strukturen till en klass, behöver du bara ändra termen struct till 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å 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

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(); } }

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?

question mark

När anropas en konstruktormetod?

Select the correct answer

question mark

Vad kommer konstruktörsmetoden att heta i en klass som heter "Animal"?

Select the correct answer

question mark

Vilket nyckelord används före konstruktörens namn?

Select the correct answer

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 3. Kapitel 9

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

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

bookKlasskonstruktorer

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

index.cs

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

Till exempel:

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 från utdata att Console.WriteLine-satsen inuti Player-konstruktorn körs varje gång ett nytt objekt skapas.

Note
Notera

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.

Note
Notera

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

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(); } }

För att konvertera Player-strukturen till en klass, behöver du bara ändra termen struct till 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å 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

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(); } }

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?

question mark

När anropas en konstruktormetod?

Select the correct answer

question mark

Vad kommer konstruktörsmetoden att heta i en klass som heter "Animal"?

Select the correct answer

question mark

Vilket nyckelord används före konstruktörens namn?

Select the correct answer

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 3. Kapitel 9
some-alt