Comparteix via


sealed (Referencia de C#)

Al aplicar el sealed modificador a una clase, impide que otras clases hereden de esa clase. En el ejemplo siguiente, la clase B hereda de la clase A, pero ninguna clase puede heredar de la clase B.

class A {}
sealed class B : A {}

También puede usar el modificador sealed en un método o propiedad que invalide un método virtual o una propiedad en una clase base. Mediante este enfoque, permite a los desarrolladores derivar clases de la clase, a la vez que impide que invaliden propiedades o métodos virtuales específicos.

La documentación de referencia del lenguaje C# cubre la versión más reciente publicada del lenguaje C#. También contiene documentación inicial sobre las características de las versiones preliminares públicas de la próxima versión del lenguaje.

La documentación identifica cualquier característica introducida por primera vez en las últimas tres versiones del idioma o en las versiones preliminares públicas actuales.

Sugerencia

Para buscar cuándo se introdujo por primera vez una característica en C#, consulte el artículo sobre el historial de versiones del lenguaje C#.

En el ejemplo siguiente, Z hereda de Y pero Z no puede invalidar la función F virtual declarada en X y sellada en Y.

class X
{
    protected virtual void F() { Console.WriteLine("X.F"); }
    protected virtual void F2() { Console.WriteLine("X.F2"); }
}

class Y : X
{
    sealed protected override void F() { Console.WriteLine("Y.F"); }
    protected override void F2() { Console.WriteLine("Y.F2"); }
}

class Z : Y
{
    // Attempting to override F causes compiler error CS0239.
    // protected override void F() { Console.WriteLine("Z.F"); }

    // Overriding F2 is allowed.
    protected override void F2() { Console.WriteLine("Z.F2"); }
}

Al definir nuevos métodos o propiedades en una clase, puede evitar que las clases derivadas las sobrescriban al no declararlas como virtual. Al invalidar un virtual miembro declarado en un tipo base, puede evitar que los tipos derivados lo invaliden mediante la sealed palabra clave , como se muestra en el ejemplo siguiente:

public sealed override string ToString() => Value;

Es un error usar el modificador abstracto con una clase sellada, ya que una clase abstracta debe heredarla una clase que proporcione una implementación de los métodos o propiedades abstractos.

Cuando aplique el sealed modificador a un método o propiedad, úselo siempre con invalidación.

Dado que los structs están sellados implícitamente, no se pueden heredar de ellos.

Para obtener más información, vea Herencia.

Para obtener más ejemplos, vea Clases y miembros de clase abstractos y sellados.

sealed class SealedClass
{
    public int x;
    public int y;
}

class SealedTest2
{
    static void Main()
    {
        var sc = new SealedClass();
        sc.x = 110;
        sc.y = 150;
        Console.WriteLine($"x = {sc.x}, y = {sc.y}");
    }
}
// Output: x = 110, y = 150

En el ejemplo anterior, podría intentar heredar de la clase sellada mediante la instrucción siguiente:

class MyDerivedC: SealedClass {} // Error

El resultado es un mensaje de error:

'MyDerivedC': cannot derive from sealed type 'SealedClass'

Para determinar si se debe sellar una clase, un método o una propiedad, tenga en cuenta los dos puntos siguientes:

  • Las posibles ventajas que podrían obtener las clases derivadas con la capacidad de personalizar la clase.
  • La posibilidad de derivar clases podría modificar las clases de tal forma que ya no funcionen correctamente o según lo previsto.

Especificación del lenguaje C#

Para obtener más información, consulte la Especificación del lenguaje C#. La especificación del lenguaje es el origen definitivo de la sintaxis y el uso de C#.

Consulte también