Ce face Clase și membri static
Un câmp, o proprietate sau o metodă static există o singură dată pentru tot programul și se accesează prin numele tipului: Math.Max, Console.WriteLine. Membrii statici nu au acces la this și nici la membrii de instanță.
O static class nu poate fi creată cu new și nu poate fi moștenită; este locul potrivit pentru funcții utilitare fără stare și pentru metodele de extensie. const este implicit static și trebuie să fie o valoare cunoscută la compilare; pentru valori calculate o singură dată la pornire folosește static readonly.
Cu using static System.Math; poți apela membrii statici fără prefix: Max(3, 7).
Exemple
Exemplul 1: Utilitare și contor static
Console.WriteLine(Tva.Aplica(100));
Console.WriteLine(Tva.Procent);
new Comanda();
new Comanda();
new Comanda();
Console.WriteLine($"Comenzi create: {Comanda.Total}");
static class Tva
{
public const int Procent = 19;
public static int Aplica(int suma) => suma + suma * Procent / 100;
}
class Comanda
{
public static int Total { get; private set; }
public Comanda() => Total++;
}
Rezultat
119
19
Comenzi create: 3
Exemplul 2: using static și static readonly
using static System.Math;
Console.WriteLine(Max(3, 7));
Console.WriteLine(Abs(-12));
Console.WriteLine(Setari.Oras);
static class Setari
{
public static readonly string Oras = "Iași".ToUpper();
}
Rezultat
7
12
IAȘI
Greșeli frecvente
- Starea statică modificabilă este partajată de toate firele de execuție și de toate cererile într-o aplicație web. Fără sincronizare apar erori aleatorii.
constse copiază la compilare în proiectele care îl folosesc; dacă valoarea se poate schimba între versiuni, foloseștestatic readonly.- Apelarea unei metode de instanță dintr-o metodă statică fără obiect dă eroarea CS0120.
Comenzi înrudite
Metode (static, void, return): O metodă grupează cod reutilizabil sub un nume: primește parametri, poate returna o valoare cu return sau nimic (void).Metode de extensie (this): Adaugă metode unui tip existent (string, int, interfețe) fără să-l modifici: metodă statică cu this în fața primului parametru.Constructori (this, supraîncărcare, static): Constructorul inițializează un obiect creat cu new; poate avea variante, poate apela altă variantă cu : this(…) și există și constructor static.Math (Round, Pow, Sqrt, Clamp): Clasa statică Math: rotunjire, putere, radical, valoare absolută, minim/maxim și limitarea unei valori într-un interval.