Clase și membri static în C# (.NET)

OOP modern și programare asincronă C# 2.0 (static class)

Membrii static aparțin tipului, nu unui obiect; o static class conține doar membri statici și nu poate fi instanțiată.

Sintaxă C#
static class Tva { public const int Procent = 19; public static int Aplica(int suma) => ...; }

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.
  • const se copiază la compilare în proiectele care îl folosesc; dacă valoarea se poate schimba între versiuni, folosește static 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.