Strukturkonstruktorer
En konstruktor är en metod som automatiskt körs när ett nytt objekt skapas.
Syntaxen för en konstruktor liknar den för en metod, men du utelämnar helt enkelt returnType eftersom en konstruktor inte returnerar något värde:
index.cs
1234567891011struct structureName { // ... fields (optional) public structureName(parameter1, parameter2, ...) { // code } // ... methods (optional) }
Följande punkter är viktiga att notera om konstruktorsyntaxen:
- Konstruktorns namn är detsamma som strukturens namn;
- En konstruktor har inget returvärde.
Följande program visar hur konstruktorn anropas varje gång ett objekt skapas:
index.cs
12345678910111213141516171819using System; struct Player { public Player() { Console.WriteLine($"New Player Object Created"); } } class Program { static void Main(string[] args) { Player player1 = new Player(); Player player2 = new Player(); Player player3 = new Player(); } }
Om du använder en C#-version äldre än C# 10
kan du få ett kompileringsfel. Det rekommenderas att använda C# 10
eller en senare version. Om du inte vill byta till en nyare version är det viktigt att notera att användningen av konstruktorer blir mer begränsad. Till exempel kan du inte skapa en parameterlös konstruktor i äldre versioner.
Lägg till ett fält i Player
som heter id
, vilket kommer att vara en unik identifierare för det objektet så att varje objekt får ett eget värde för id
. Det ska börja från 0
och öka. För att uppnå detta behöver du skapa en global variabel som heter totalPlayers
.
index.cs
12345678910111213141516171819202122232425262728using System; class ConsoleApp { // We use the term 'static' when declaring variables directly under class // This will be explained in much more detail in later sections. public static int totalPlayers = 0; // This time we create put the struct inside the `ConsoleApp` class // This is to be able to use the `totalPlayers` variable easily. 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(); } }
I koden ovan placerades structen inuti Program
-klassen för att kunna komma åt variabeln 'totalPlayers' från konstruktorn.
Data kan skickas in i en konstruktor vid skapandet av ett nytt objekt med följande syntax:
structureName variableName = new structureName(argument1, argument2, …);
Nedan följer ett praktiskt exempel på användning:
index.cs
1234567891011121314151617181920212223242526272829using System; struct Coordinate3D { public double x; public double y; public double z; public Coordinate3D(double x, double y, double z) { this.x = x; this.y = y; this.z = z; } public void displayValue() { Console.WriteLine($"{this.x}, {this.y}, {this.z}"); } } class ConsoleApp { static void Main(string[] args) { Coordinate3D coord1 = new Coordinate3D(3, 5, 7); coord1.displayValue(); } }
Låt oss gå igenom koden steg för steg.
Först skapades en konstruktor och inuti konstruktorn tilldelades de överförda värdena x
, y
, z
till fälten x
, y
och z
:
index.cs
123456public Coordinate3D(double x, double y, double z) { this.x = x; this.y = y; this.z = z; }
Inuti metoden Main
skapades ett nytt Coordinate3D
-objekt och värdena 3
, 5
och 7
skickades som x
, y
och z
genom konstruktorn.
index.cs
1Coordinate3D coord1 = new Coordinate3D(3, 5, 7);
För att bekräfta om fälten har initierats korrekt av konstruktorn eller inte, användes metoden displayValue
:
index.cs
1coord1.displayValue();
Utdata visade att fälten uppdaterades framgångsrikt.
Konstruktörer är mycket användbara när du vill initiera objekt med viss data eller för att utföra vissa initiala operationer när ett objekt skapas.
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
Awesome!
Completion rate improved to 2.04
Strukturkonstruktorer
Svep för att visa menyn
En konstruktor är en metod som automatiskt körs när ett nytt objekt skapas.
Syntaxen för en konstruktor liknar den för en metod, men du utelämnar helt enkelt returnType eftersom en konstruktor inte returnerar något värde:
index.cs
1234567891011struct structureName { // ... fields (optional) public structureName(parameter1, parameter2, ...) { // code } // ... methods (optional) }
Följande punkter är viktiga att notera om konstruktorsyntaxen:
- Konstruktorns namn är detsamma som strukturens namn;
- En konstruktor har inget returvärde.
Följande program visar hur konstruktorn anropas varje gång ett objekt skapas:
index.cs
12345678910111213141516171819using System; struct Player { public Player() { Console.WriteLine($"New Player Object Created"); } } class Program { static void Main(string[] args) { Player player1 = new Player(); Player player2 = new Player(); Player player3 = new Player(); } }
Om du använder en C#-version äldre än C# 10
kan du få ett kompileringsfel. Det rekommenderas att använda C# 10
eller en senare version. Om du inte vill byta till en nyare version är det viktigt att notera att användningen av konstruktorer blir mer begränsad. Till exempel kan du inte skapa en parameterlös konstruktor i äldre versioner.
Lägg till ett fält i Player
som heter id
, vilket kommer att vara en unik identifierare för det objektet så att varje objekt får ett eget värde för id
. Det ska börja från 0
och öka. För att uppnå detta behöver du skapa en global variabel som heter totalPlayers
.
index.cs
12345678910111213141516171819202122232425262728using System; class ConsoleApp { // We use the term 'static' when declaring variables directly under class // This will be explained in much more detail in later sections. public static int totalPlayers = 0; // This time we create put the struct inside the `ConsoleApp` class // This is to be able to use the `totalPlayers` variable easily. 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(); } }
I koden ovan placerades structen inuti Program
-klassen för att kunna komma åt variabeln 'totalPlayers' från konstruktorn.
Data kan skickas in i en konstruktor vid skapandet av ett nytt objekt med följande syntax:
structureName variableName = new structureName(argument1, argument2, …);
Nedan följer ett praktiskt exempel på användning:
index.cs
1234567891011121314151617181920212223242526272829using System; struct Coordinate3D { public double x; public double y; public double z; public Coordinate3D(double x, double y, double z) { this.x = x; this.y = y; this.z = z; } public void displayValue() { Console.WriteLine($"{this.x}, {this.y}, {this.z}"); } } class ConsoleApp { static void Main(string[] args) { Coordinate3D coord1 = new Coordinate3D(3, 5, 7); coord1.displayValue(); } }
Låt oss gå igenom koden steg för steg.
Först skapades en konstruktor och inuti konstruktorn tilldelades de överförda värdena x
, y
, z
till fälten x
, y
och z
:
index.cs
123456public Coordinate3D(double x, double y, double z) { this.x = x; this.y = y; this.z = z; }
Inuti metoden Main
skapades ett nytt Coordinate3D
-objekt och värdena 3
, 5
och 7
skickades som x
, y
och z
genom konstruktorn.
index.cs
1Coordinate3D coord1 = new Coordinate3D(3, 5, 7);
För att bekräfta om fälten har initierats korrekt av konstruktorn eller inte, användes metoden displayValue
:
index.cs
1coord1.displayValue();
Utdata visade att fälten uppdaterades framgångsrikt.
Konstruktörer är mycket användbara när du vill initiera objekt med viss data eller för att utföra vissa initiala operationer när ett objekt skapas.
Tack för dina kommentarer!