Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Costruttori di Classe | Introduzione alla Programmazione Orientata agli Oggetti (OOP)
C# Oltre le Basi

bookCostruttori 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

index.cs

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

Ad esempio:

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

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.

Note
Nota

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.

Note
Nota

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

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

Per convertire la struct Player in una classe, è sufficiente sostituire il termine struct con 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(); } }

Analogamente, è possibile definire costruttori che accettano alcuni argomenti. Solitamente, questo metodo viene utilizzato per semplificare l'inizializzazione dei campi della classe:

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

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?

question mark

Quando viene chiamato un metodo costruttore?

Select the correct answer

question mark

Quale sarà il nome di un metodo costruttore in una classe chiamata "Animal"?

Select the correct answer

question mark

Quale parola chiave viene utilizzata prima del nome di un costruttore?

Select the correct answer

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 3. Capitolo 9

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

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

bookCostruttori 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

index.cs

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

Ad esempio:

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

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.

Note
Nota

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.

Note
Nota

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

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

Per convertire la struct Player in una classe, è sufficiente sostituire il termine struct con 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(); } }

Analogamente, è possibile definire costruttori che accettano alcuni argomenti. Solitamente, questo metodo viene utilizzato per semplificare l'inizializzazione dei campi della classe:

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

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?

question mark

Quando viene chiamato un metodo costruttore?

Select the correct answer

question mark

Quale sarà il nome di un metodo costruttore in una classe chiamata "Animal"?

Select the correct answer

question mark

Quale parola chiave viene utilizzata prima del nome di un costruttore?

Select the correct answer

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 3. Capitolo 9
some-alt