Clases y miembros de clase abstractos y sellados (Guía de programación de C#)Abstract and Sealed Classes and Class Members (C# Programming Guide)

La palabra clave abstract permite crear clases y miembros class que están incompletos y se deben implementar en una clase derivada.The abstract keyword enables you to create classes and class members that are incomplete and must be implemented in a derived class.

La palabra clave sealed permite impedir la herencia de una clase o de ciertos miembros de clase marcados previamente como virtual.The sealed keyword enables you to prevent the inheritance of a class or certain class members that were previously marked virtual.

Clases y miembros de clase abstractosAbstract Classes and Class Members

Las clases se pueden declarar como abstractas si se incluye la palabra clave abstract antes de la definición de clase.Classes can be declared as abstract by putting the keyword abstract before the class definition. Por ejemplo:For example:

public abstract class A
{
    // Class members here.
}

No se pueden crear instancias de una clase abstracta.An abstract class cannot be instantiated. El propósito de una clase abstracta es proporcionar una definición común de una clase base que múltiples clases derivadas pueden compartir.The purpose of an abstract class is to provide a common definition of a base class that multiple derived classes can share. Por ejemplo, una biblioteca de clases puede definir una clase abstracta que se utiliza como parámetro para muchas de sus funciones y solicitar a los programadores que utilizan esa biblioteca que proporcionen su propia implementación de la clase mediante la creación de una clase derivada.For example, a class library may define an abstract class that is used as a parameter to many of its functions, and require programmers using that library to provide their own implementation of the class by creating a derived class.

Las clases abstractas también pueden definir métodos abstractos.Abstract classes may also define abstract methods. Esto se consigue agregando la palabra clave abstract antes del tipo de valor que devuelve el método.This is accomplished by adding the keyword abstract before the return type of the method. Por ejemplo:For example:

public abstract class A
{
    public abstract void DoWork(int i);
}

Los métodos abstractos no tienen ninguna implementación, de modo que la definición de método va seguida por un punto y coma en lugar de un bloque de método normal.Abstract methods have no implementation, so the method definition is followed by a semicolon instead of a normal method block. Las clases derivadas de la clase abstracta deben implementar todos los métodos abstractos.Derived classes of the abstract class must implement all abstract methods. Cuando una clase abstracta hereda un método virtual de una clase base, la clase abstracta puede reemplazar el método virtual con un método abstracto.When an abstract class inherits a virtual method from a base class, the abstract class can override the virtual method with an abstract method. Por ejemplo:For example:

// compile with: -target:library
public class D
{
    public virtual void DoWork(int i)
    {
        // Original implementation.
    }
}

public abstract class E : D
{
    public abstract override void DoWork(int i);
}

public class F : E
{
    public override void DoWork(int i)
    {
        // New implementation.
    }
}

Si un método virtual se declara como abstract, sigue siendo virtual para cualquier clase que herede de la clase abstracta.If a virtual method is declared abstract, it is still virtual to any class inheriting from the abstract class. Una clase que hereda un método abstracto no puede tener acceso a la implementación original del método: en el ejemplo anterior, DoWork en la clase F no puede llamar a DoWork en la clase D. De esta manera, una clase abstracta puede exigir a las clases derivadas que proporcionen nuevas implementaciones de método para los métodos virtuales.A class inheriting an abstract method cannot access the original implementation of the method—in the previous example, DoWork on class F cannot call DoWork on class D. In this way, an abstract class can force derived classes to provide new method implementations for virtual methods.

Clases y miembros de clase selladosSealed Classes and Class Members

Las clases se pueden declarar como selladas si se incluye la palabra clave sealed antes de la definición de clase.Classes can be declared as sealed by putting the keyword sealed before the class definition. Por ejemplo:For example:

public sealed class D
{
    // Class members here.
}

Una clase sellada no se puede utilizar como clase base.A sealed class cannot be used as a base class. Por esta razón, tampoco puede ser una clase abstracta.For this reason, it cannot also be an abstract class. Las clases selladas evitan la derivación.Sealed classes prevent derivation. Puesto que nunca se pueden utilizar como clase base, algunas optimizaciones en tiempo de ejecución pueden hacer que sea un poco más rápido llamar a miembros de clase sellada.Because they can never be used as a base class, some run-time optimizations can make calling sealed class members slightly faster.

Un método, indizador, propiedad o evento de una clase derivada que reemplaza a un miembro virtual de la clase base puede declarar ese miembro como sellado.A method, indexer, property, or event, on a derived class that is overriding a virtual member of the base class can declare that member as sealed. Esto niega el aspecto virtual del miembro para cualquier clase derivada adicional.This negates the virtual aspect of the member for any further derived class. Esto se logra colocando la palabra clave sealed antes de la palabra clave override en la declaración del miembro de clase.This is accomplished by putting the sealed keyword before the override keyword in the class member declaration. Por ejemplo:For example:

public class D : C
{
    public sealed override void DoWork() { }
}

Vea tambiénSee also