sealed (Referencia de C#)sealed (C# Reference)

Cuando se aplica a una clase, el modificador sealed impide que otras clases hereden de ella.When applied to a class, the sealed modifier prevents other classes from inheriting from it. En el ejemplo siguiente, la clase B hereda de la clase A, pero ninguna clase puede heredar de la clase B.In the following example, class B inherits from class A, but no class can inherit from class B.

class A {}
sealed class B : A {}

También puede usar el modificador sealed en un método o propiedad que invalida un método o propiedad virtual en una clase base.You can also use the sealed modifier on a method or property that overrides a virtual method or property in a base class. De este modo, puede permitir que las clases deriven de su clase e impedir que invaliden determinados métodos o propiedades virtuales.This enables you to allow classes to derive from your class and prevent them from overriding specific virtual methods or properties.

EjemploExample

En el ejemplo siguiente, Z hereda de Y pero Z no puede invalidar la función virtual F que se declara en X y se sella en Y.In the following example, Z inherits from Y but Z cannot override the virtual function F that is declared in X and sealed in 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 impedir que las clases derivadas los invaliden. Para ello, no los declare como virtuales.When you define new methods or properties in a class, you can prevent deriving classes from overriding them by not declaring them as virtual.

Es un error usar el modificador abstract con una clase sellada, porque una clase abstracta debe heredarla una clase que proporcione una implementación de los métodos o propiedades abstractos.It is an error to use the abstract modifier with a sealed class, because an abstract class must be inherited by a class that provides an implementation of the abstract methods or properties.

Cuando se aplica a un método o propiedad, el modificador sealed siempre se debe usar con override.When applied to a method or property, the sealed modifier must always be used with override.

Dado que los structs están sellados implícitamente, no puede heredarse.Because structs are implicitly sealed, they cannot be inherited.

Para obtener más información, vea Herencia.For more information, see Inheritance.

Para obtener más ejemplos, vea Clases y miembros de clase abstractos y sellados.For more examples, see Abstract and Sealed Classes and Class Members.

EjemploExample

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

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

En el ejemplo anterior, podría intentar heredar de la clase sellada mediante la instrucción siguiente:In the previous example, you might try to inherit from the sealed class by using the following statement:

class MyDerivedC: SealedClass {} // Error

El resultado es un mensaje de error:The result is an error message:

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

ComentariosRemarks

Para determinar si se debe sellar una clase, un método o una propiedad, por lo general debe tener en cuenta los dos puntos siguientes:To determine whether to seal a class, method, or property, you should generally consider the following two points:

  • Las posibles ventajas que podrían obtener las clases derivadas con la capacidad de personalizar la clase.The potential benefits that deriving classes might gain through the ability to customize your class.

  • La posibilidad de que las clases derivadas modifiquen las clases de tal manera que no funcionen correctamente o del modo esperado.The potential that deriving classes could modify your classes in such a way that they would no longer work correctly or as expected.

Especificación del lenguaje C#C# language specification

Para obtener más información, consulte la Especificación del lenguaje C#.For more information, see the C# Language Specification. La especificación del lenguaje es la fuente definitiva de la sintaxis y el uso de C#.The language specification is the definitive source for C# syntax and usage.

Vea tambiénSee also