Ce face sealed
sealed class nu poate fi folosită ca bază: class X : Factura dă eroarea CS0509. E util pentru clase care nu au fost gândite pentru extindere (siguranță, invariante) și ajută compilatorul JIT să apeleze metodele virtuale direct, fără căutare la rulare.
Pe o metodă, sealed se pune doar împreună cu override: clasa curentă înlocuiește metoda bazei, dar clasele derivate din ea nu o mai pot înlocui. Tipurile record pot avea sealed override ToString(), ca derivatele să nu-l genereze din nou.
Multe ghiduri .NET recomandă ca o clasă publică să fie sealed dacă nu are un motiv explicit să fie extinsă; analizorul CA1852 semnalează tipurile interne care nu sunt moștenite nicăieri și pot fi sigilate.
Exemple
Exemplul 1: Metodă sigilată într-o ierarhie
Moneda fixează formatul; Leu nu îl mai poate schimba, dar poate adăuga alte metode.
Suma s = new Leu(250);
Console.WriteLine(s.Formatat());
class Suma(int valoare)
{
public int Valoare { get; } = valoare;
public virtual string Formatat() => Valoare.ToString();
}
class Moneda(int valoare, string cod) : Suma(valoare)
{
public sealed override string Formatat() => $"{Valoare} {cod}";
}
sealed class Leu(int valoare) : Moneda(valoare, "RON")
{
// public override string Formatat() => ...; // eroare CS0239: metoda este sealed
}
Rezultat
250 RON
Exemplul 2: Clasă sigilată și verificare la rulare
Type.IsSealed spune dacă un tip este sigilat; string este și el sealed.
Console.WriteLine(typeof(Factura).IsSealed);
Console.WriteLine(typeof(string).IsSealed);
Console.WriteLine(typeof(Exception).IsSealed);
sealed class Factura
{
public required string Numar { get; init; }
}
Rezultat
True
True
False
Greșeli frecvente
sealedpe o metodă fărăoverridenu se compilează (CS0238).static classșisealednu se combină: o clasă statică este deja sigilată și abstractă.- Sigilarea unei clase dintr-o bibliotecă publicată este o schimbare incompatibilă pentru cei care o moșteneau deja.
Comenzi înrudite
Moștenire: virtual, override și base: O clasă derivată preia membrii clasei de bază (class B : A); metodele virtual pot fi înlocuite cu override, iar base apelează varianta de bază.abstract (clase și metode abstracte): O clasă abstract nu poate fi instanțiată direct; metodele abstract nu au corp și trebuie implementate de fiecare clasă derivată.Clase și membri static: Membrii static aparțin tipului, nu unui obiect; o static class conține doar membri statici și nu poate fi instanțiată.
Întrebări & Exemple de Cod:
sealedAi o nelămurire despre utilizarea comenzii
sealedsau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!
Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.