Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara La Parola Chiave `static` | Fondamenti Di OOP
C# Oltre le Basi

bookLa Parola Chiave `static`

Una parola chiave importante che potresti aver già incontrato molte volte è la parola chiave static. Nel Corso di Base su C#, è stato menzionato che static viene utilizzato quando si definiscono variabili globali - variabili che si trovano al di fuori di qualsiasi metodo specifico:

index.cs

index.cs

copy
1234567891011
using System; class ConsoleApp { static int val = 10; static void Main() { Console.WriteLine($"The value is {val}"); } }

All'epoca era un modo conveniente per descrivere la parola chiave static perché si presumeva che il lettore potesse non avere alcuna conoscenza di oggetti o classi, tuttavia ora, se osservi il codice, potresti renderti conto che val è fondamentalmente un campo della classe ConsoleApp. Tuttavia, nota che la classe ConsoleApp è leggermente diversa dalle classi che normalmente crei. Questo perché ConsoleApp rappresenta il programma stesso e non esiste alcun oggetto di ConsoleApp. Tornerai su questo aspetto tra poco.

Poiché una classe è solo un modello, più simile a un guscio vuoto, normalmente non contiene dati di per sé; invece, crei oggetti utilizzando quel modello e poi memorizzi e accedi ai dati da quegli oggetti - come spiegato in precedenza:

index.cs

index.cs

copy
12345678910111213141516171819202122232425262728
using System; class Complex { public int real; public int img; public Complex(int real, int img) { this.real = real; this.img = img; } } class ConsoleApp { static int val = 10; static void Main() { Complex c = new Complex(5, 10); // We can use and update the field of 'c' which is an instance. Console.WriteLine(c.real); c.real = 7; Console.WriteLine(c.real); } }

Anche all'interno di una classe, quando si accede a questi campi, lo si fa tramite un oggetto. Ad esempio, in un costruttore, si utilizzano fondamentalmente i dati passati dall'oggetto che ha invocato il metodo costruttore:

index.cs

index.cs

copy
12345678
public Complex(int real, int img) { // 'int real' and 'int img' contain the data which was passed // 'this.real' refers to the 'real' field of the object which is calling this constructor // same is the case for 'this.img' this.real = real; this.img = img; }

Allo stesso modo, anche in altri metodi, quando si accede ai campi, si stanno essenzialmente accedendo ai campi degli oggetti che chiamano quei metodi, e non della classe stessa, poiché normalmente una classe non contiene dati.

Tuttavia, esiste un modo per memorizzare dati direttamente in una classe e rendere una proprietà accessibile senza la necessità di creare un oggetto. È possibile farlo semplicemente rendendo quel campo o metodo static:

index.cs

index.cs

copy
123456789101112131415161718192021222324252627282930313233343536373839
using System; class Complex { public int real; public int img; // A static field can contain data // It is set to private because we don't want it to be manually modifiable from outside // This will track the total number of 'Complex' objects created private static int numbers = 0; public Complex(int real, int img) { this.real = real; this.img = img; numbers += 1; } // A static method // A static method or field can be accessed using the 'ClassName.PropertyName' syntax (see below) public static int getTotalComplexNumbers() { return numbers; } } class ConsoleApp { static void Main() { Console.WriteLine(Complex.getTotalComplexNumbers()); // 0 new Complex(1, 2); Console.WriteLine(Complex.getTotalComplexNumbers()); // 1 new Complex(2, 3); Console.WriteLine(Complex.getTotalComplexNumbers()); // 2 } }

Poiché la ConsoleApp o la classe principale di qualsiasi programma che rappresenta il programma stesso non può avere oggetti, è necessario rendere i loro metodi e campi statici. Questo è il motivo per cui anche il metodo Main è static:

index.cs

index.cs

copy
1234
static void Main() { // code }

1. Una classe può memorizzare dati direttamente?

2. Qual è la sintassi corretta per modificare il campo value?

question mark

Una classe può memorizzare dati direttamente?

Select the correct answer

question mark

Qual è la sintassi corretta per modificare il campo value?

Select the correct answer

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 4. Capitolo 5

Chieda ad AI

expand

Chieda ad AI

ChatGPT

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

Awesome!

Completion rate improved to 2.04

bookLa Parola Chiave `static`

Scorri per mostrare il menu

Una parola chiave importante che potresti aver già incontrato molte volte è la parola chiave static. Nel Corso di Base su C#, è stato menzionato che static viene utilizzato quando si definiscono variabili globali - variabili che si trovano al di fuori di qualsiasi metodo specifico:

index.cs

index.cs

copy
1234567891011
using System; class ConsoleApp { static int val = 10; static void Main() { Console.WriteLine($"The value is {val}"); } }

All'epoca era un modo conveniente per descrivere la parola chiave static perché si presumeva che il lettore potesse non avere alcuna conoscenza di oggetti o classi, tuttavia ora, se osservi il codice, potresti renderti conto che val è fondamentalmente un campo della classe ConsoleApp. Tuttavia, nota che la classe ConsoleApp è leggermente diversa dalle classi che normalmente crei. Questo perché ConsoleApp rappresenta il programma stesso e non esiste alcun oggetto di ConsoleApp. Tornerai su questo aspetto tra poco.

Poiché una classe è solo un modello, più simile a un guscio vuoto, normalmente non contiene dati di per sé; invece, crei oggetti utilizzando quel modello e poi memorizzi e accedi ai dati da quegli oggetti - come spiegato in precedenza:

index.cs

index.cs

copy
12345678910111213141516171819202122232425262728
using System; class Complex { public int real; public int img; public Complex(int real, int img) { this.real = real; this.img = img; } } class ConsoleApp { static int val = 10; static void Main() { Complex c = new Complex(5, 10); // We can use and update the field of 'c' which is an instance. Console.WriteLine(c.real); c.real = 7; Console.WriteLine(c.real); } }

Anche all'interno di una classe, quando si accede a questi campi, lo si fa tramite un oggetto. Ad esempio, in un costruttore, si utilizzano fondamentalmente i dati passati dall'oggetto che ha invocato il metodo costruttore:

index.cs

index.cs

copy
12345678
public Complex(int real, int img) { // 'int real' and 'int img' contain the data which was passed // 'this.real' refers to the 'real' field of the object which is calling this constructor // same is the case for 'this.img' this.real = real; this.img = img; }

Allo stesso modo, anche in altri metodi, quando si accede ai campi, si stanno essenzialmente accedendo ai campi degli oggetti che chiamano quei metodi, e non della classe stessa, poiché normalmente una classe non contiene dati.

Tuttavia, esiste un modo per memorizzare dati direttamente in una classe e rendere una proprietà accessibile senza la necessità di creare un oggetto. È possibile farlo semplicemente rendendo quel campo o metodo static:

index.cs

index.cs

copy
123456789101112131415161718192021222324252627282930313233343536373839
using System; class Complex { public int real; public int img; // A static field can contain data // It is set to private because we don't want it to be manually modifiable from outside // This will track the total number of 'Complex' objects created private static int numbers = 0; public Complex(int real, int img) { this.real = real; this.img = img; numbers += 1; } // A static method // A static method or field can be accessed using the 'ClassName.PropertyName' syntax (see below) public static int getTotalComplexNumbers() { return numbers; } } class ConsoleApp { static void Main() { Console.WriteLine(Complex.getTotalComplexNumbers()); // 0 new Complex(1, 2); Console.WriteLine(Complex.getTotalComplexNumbers()); // 1 new Complex(2, 3); Console.WriteLine(Complex.getTotalComplexNumbers()); // 2 } }

Poiché la ConsoleApp o la classe principale di qualsiasi programma che rappresenta il programma stesso non può avere oggetti, è necessario rendere i loro metodi e campi statici. Questo è il motivo per cui anche il metodo Main è static:

index.cs

index.cs

copy
1234
static void Main() { // code }

1. Una classe può memorizzare dati direttamente?

2. Qual è la sintassi corretta per modificare il campo value?

question mark

Una classe può memorizzare dati direttamente?

Select the correct answer

question mark

Qual è la sintassi corretta per modificare il campo value?

Select the correct answer

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 4. Capitolo 5
some-alt