C# - Classi statiche
Classi statiche
• Una classe statica è una classe della quale non è possibile creare oggetti (istanze).
• Per accedere ai membri della classe, non essendoci oggetti, si utilizza il nome della classe stessa.
• L'utilizzo di una classe statica è - per esempio - come contenitore di metodi con solo parametri di input e di output e che non leggono/scrivono campi di istanza interni all'oggetto.
• Per esempio la classe .NET System.Math è una classe statica in quanto ha diversi metodi che eseguono operazioni matematiche.
• Quindi una classe statica contiene solo membri statici (altrimenti il compilatore dà un errore). È equivalente a una classe non statica con (1) membri statici e (2) costruttore privato, per impedire la creazione si istanze. Se però si imposta direttamente tutta la classe come statica, si permette al compilatore di effettuare i dovuti controlli.
• Le classi statiche sono sealed, cioè non possono essere ereditate.
• Le classi statiche possono contenere un costruttore, ovviamente statico.
Esempio
• In questo esempio, viene definita la classe statica, 'FormuleDelCerchio' con il metodo statico 'Circonferenza'.
static class FormuleDelCerchio
{
public static double Circonferenza(double raggio)
{
return 2 * Math.PI * raggio;
}
// Altre formule
// ...
}
• Utilizzo della classe statica (non si istanziano oggetti):
Console.WriteLine("Raggio: {0} - Circonferenza {1}", 5, FormuleDelCerchio.Circonferenza(5));
Console.ReadKey();
Membri statici
• Anche una classe non statica può contenere campi, proprietà, metodi e eventi statici. Per accedere ai membri statici occorre utilizzare il nome della classe in quanto questi membri non sono accessibili alle istanze (oggetti).
• Un campo statico o una proprietà statica esiste in una sola copia.
• Dichiarare uno o più membri statici in una classe non statica è una tecnica utilizzata per
- contare il numero di oggetti creati della classe;
- condividere un valore tra tutti gli oggetti della classe.
Esempio
• In questo esempio, viene definita la classe non statica, 'Punto' con il campo statico 'NumeroIstanze'.
class Punto
{
public int CoordinataX; // Campo public
public int CoordinataY; // Campo public
static public int NumeroIstanze; // Campo public e Statico
// Costruttore
public Punto()
{
NumeroIstanze++;
}
}
• Utilizzo della classe:
// Si può accedere al campo statico utilizzando il nome della classe
// e non dell'oggetto
Punto.NumeroIstanze = 0;
// Prima istanza
Punto myPoint1 = new Punto();
myPoint1.CoordinataX = 1;
myPoint1.CoordinataY = 1;
// Seconda istanza
Punto myPoint2 = new Punto();
myPoint2.CoordinataX = 2;
myPoint1.CoordinataY = 2;
// Numero di istanze generate
Console.WriteLine(Punto.NumeroIstanze);
Console.ReadKey();