Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
La palabra clave abstract permite crear clases y miembros de clase que son incompletos y deben implementarse en una clase derivada.
La palabra clave sealed permite evitar la herencia de una clase o de determinados miembros de clase marcados previamente como virtuales.
Clases abstractas y miembros de las clases
Las clases se pueden declarar como abstractas colocando la palabra clave abstract
antes de la definición de clase. Por ejemplo:
public abstract class A
{
// Class members here.
}
No es posible instanciar una clase abstracta. El propósito de una clase abstracta es proporcionar una definición común de una clase base que pueden compartir varias clases derivadas. Por ejemplo, una biblioteca de clases puede definir una clase abstracta que se usa como parámetro para muchas de sus funciones y requerir a los programadores que usen esa biblioteca para proporcionar su propia implementación de la clase mediante la creación de una clase derivada.
Las clases abstractas también pueden definir métodos abstractos. Esto se logra agregando la palabra clave abstract
antes del tipo de valor devuelto del método . Por ejemplo:
public abstract class A
{
public abstract void DoWork(int i);
}
Los métodos abstractos no tienen ninguna implementación, por lo que la definición del método va seguida de un punto y coma en lugar de un bloque de método normal. Las clases derivadas de la clase abstracta deben implementar todos los métodos abstractos. Cuando una clase abstracta hereda un método virtual de una clase base, la clase abstracta puede invalidar el método virtual con un método abstracto. Por ejemplo:
// 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 abstract
, sigue siendo virtual para cualquier clase que herede de la clase abstracta. 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 este modo, una clase abstracta puede forzar que las clases derivadas proporcionen nuevas implementaciones de método para los métodos virtuales.
Clases y miembros de clase sellados
Las clases se pueden declarar como selladas colocando la palabra clave sealed
antes de la definición de clase. Por ejemplo:
public sealed class D
{
// Class members here.
}
Una clase sellada no se puede usar como clase base. Por este motivo, tampoco puede ser una clase abstracta. Las clases selladas evitan la derivación. Dado que nunca se pueden usar como clase base, algunas optimizaciones en tiempo de ejecución pueden hacer que llamar a miembros de clase sellados sea ligeramente más rápido.
Un método, indexador, propiedad o evento, en una clase derivada que invalida un miembro virtual de la clase base puede declarar ese miembro como sellado. Esto niega el aspecto virtual del miembro para cualquier clase derivada adicional. Esto se logra colocando la palabra clave sealed
antes de la palabra clave override en la declaración del miembro de clase. Por ejemplo:
public class D : C
{
public sealed override void DoWork() { }
}