Costruttori di Classe
Un costruttore di classe è equivalente a un costruttore di struct. Si tratta di un metodo che viene eseguito quando viene creato un oggetto.
La sintassi per creare un costruttore è la seguente:
index.cs
1234567class className { // ... other class code public className() { // code } }
Ad esempio:
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(); } }
Dal risultato si può vedere che l'istruzione Console.WriteLine
all'interno del costruttore Player
viene eseguita ogni volta che viene creato un nuovo oggetto.
In C# 9 e nelle versioni precedenti di C#, esistono alcune differenze tra i costruttori delle struct e quelli delle classi. Ad esempio, nelle versioni precedenti non è possibile creare costruttori senza parametri per le struct, mentre in C# 10 e versioni successive questa funzionalità è supportata. Si consiglia di utilizzare l'ultima versione dei compilatori C#; in caso contrario, si potrebbero riscontrare errori durante la compilazione di parte del codice.
Di seguito è riportato un esempio di codice tratto dal capitolo Costruttori di struct. Il termine static
è spiegato nei commenti in quanto più rilevante in questo contesto; tuttavia, non è necessario comprenderlo completamente poiché questo concetto verrà approfondito nelle sezioni successive.
A differenza dei campi normali, un campo statico può contenere dati anche se non esiste alcun oggetto di quella classe. I campi statici hanno lo stesso valore per tutti gli oggetti, quindi modificare il valore di un campo statico da un oggetto lo modifica per tutti gli oggetti. La classe Program rappresenta il programma stesso, quindi se il campo statico è un membro della classe 'Program', si comporta come una variabile globale.
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(); } }
Per convertire la struct Player
in una classe, è sufficiente sostituire il termine struct
con 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(); } }
Analogamente, è possibile definire costruttori che accettano alcuni argomenti. Solitamente, questo metodo viene utilizzato per semplificare l'inizializzazione dei campi della classe:
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(); } }
A questo punto, hai affrontato la maggior parte dei concetti di base delle Classes
e, giudicando dalla sintassi e dal comportamento, le Classes
sembrano essere esattamente uguali alle Structs
, tuttavia non è così. Come affermato nel primo capitolo di questa sezione, le Struct sono una versione limitata delle Classi che forniscono solo una funzionalità di base, mentre le caratteristiche delle Classi sono molto più complesse e ampie. In questa sezione hai trattato tutte le funzionalità che sono simili tra Classes
e Structs
. Nelle prossime due sezioni apprenderai tutte le particolarità delle classi e della programmazione orientata agli oggetti.
1. Quando viene chiamato un metodo costruttore?
2. Quale sarà il nome di un metodo costruttore in una classe chiamata "Animal"?
3. Quale parola chiave viene utilizzata prima del nome di un costruttore?
Grazie per i tuoi commenti!
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione
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
Costruttori di Classe
Scorri per mostrare il menu
Un costruttore di classe è equivalente a un costruttore di struct. Si tratta di un metodo che viene eseguito quando viene creato un oggetto.
La sintassi per creare un costruttore è la seguente:
index.cs
1234567class className { // ... other class code public className() { // code } }
Ad esempio:
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(); } }
Dal risultato si può vedere che l'istruzione Console.WriteLine
all'interno del costruttore Player
viene eseguita ogni volta che viene creato un nuovo oggetto.
In C# 9 e nelle versioni precedenti di C#, esistono alcune differenze tra i costruttori delle struct e quelli delle classi. Ad esempio, nelle versioni precedenti non è possibile creare costruttori senza parametri per le struct, mentre in C# 10 e versioni successive questa funzionalità è supportata. Si consiglia di utilizzare l'ultima versione dei compilatori C#; in caso contrario, si potrebbero riscontrare errori durante la compilazione di parte del codice.
Di seguito è riportato un esempio di codice tratto dal capitolo Costruttori di struct. Il termine static
è spiegato nei commenti in quanto più rilevante in questo contesto; tuttavia, non è necessario comprenderlo completamente poiché questo concetto verrà approfondito nelle sezioni successive.
A differenza dei campi normali, un campo statico può contenere dati anche se non esiste alcun oggetto di quella classe. I campi statici hanno lo stesso valore per tutti gli oggetti, quindi modificare il valore di un campo statico da un oggetto lo modifica per tutti gli oggetti. La classe Program rappresenta il programma stesso, quindi se il campo statico è un membro della classe 'Program', si comporta come una variabile globale.
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(); } }
Per convertire la struct Player
in una classe, è sufficiente sostituire il termine struct
con 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(); } }
Analogamente, è possibile definire costruttori che accettano alcuni argomenti. Solitamente, questo metodo viene utilizzato per semplificare l'inizializzazione dei campi della classe:
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(); } }
A questo punto, hai affrontato la maggior parte dei concetti di base delle Classes
e, giudicando dalla sintassi e dal comportamento, le Classes
sembrano essere esattamente uguali alle Structs
, tuttavia non è così. Come affermato nel primo capitolo di questa sezione, le Struct sono una versione limitata delle Classi che forniscono solo una funzionalità di base, mentre le caratteristiche delle Classi sono molto più complesse e ampie. In questa sezione hai trattato tutte le funzionalità che sono simili tra Classes
e Structs
. Nelle prossime due sezioni apprenderai tutte le particolarità delle classi e della programmazione orientata agli oggetti.
1. Quando viene chiamato un metodo costruttore?
2. Quale sarà il nome di un metodo costruttore in una classe chiamata "Animal"?
3. Quale parola chiave viene utilizzata prima del nome di un costruttore?
Grazie per i tuoi commenti!