abstract (Referencia de C#)
Actualización: noviembre 2007
El modificador abstract se puede utilizar con clases, métodos, propiedades, indizadores y eventos. Use el modificador abstract en una declaración de clase para indicar que la clase sólo se puede utilizar como clase base de otras clases. Los miembros que están marcados como abstractos o que se incluyen en una clase abstracta, deben ser implementados por clases derivadas de la clase abstracta.
Ejemplo
En este ejemplo, la clase Square debe proporcionar una implementación de Area porque deriva de ShapesClass:
abstract class ShapesClass
{
abstract public int Area();
}
class Square : ShapesClass
{
int side = 0;
public Square(int n)
{
side = n;
}
// Area method is required to avoid
// a compile-time error.
public override int Area()
{
return side * side;
}
static void Main()
{
Square sq = new Square(12);
Console.WriteLine("Area of the square = {0}", sq.Area());
}
interface I
{
void M();
}
abstract class C : I
{
public abstract void M();
}
}
// Output: Area of the square = 144
Las clases de tipo abstract presentan las siguientes características:
No se pueden crear instancias de una clase abstracta.
Una clase abstracta puede contener descriptores de acceso y métodos abstractos.
No se puede modificar una clase abstracta con el modificador sealed (Referencia de C#) porque sealed impide que se herede la clase.
Una clase no abstracta derivada de una clase abstracta debe incluir implementaciones reales de todos los descriptores de acceso y métodos abstractos heredados.
Utilice el modificador abstract en una declaración de método o propiedad para indicar que el método o la propiedad no contienen implementación.
Los métodos abstractos presentan las siguientes características:
Un método abstracto es, implícitamente, un método virtual.
Las declaraciones de métodos abstractos sólo se permiten en clases abstractas.
Debido a que una declaración de método abstracto no proporciona una implementación, no existe cuerpo del método; la declaración de método finaliza simplemente con un punto y coma y sin llaves ({ }) después de la firma. Por ejemplo:
public abstract void MyMethod();
La implementación la proporciona un método de reemplazooverride (Referencia de C#), que es miembro de una clase no abstracta.
Utilizar los modificadores static o virtual en una declaración de método abstracto produce un error.
Las propiedades abstractas funcionan como los métodos abstractos, salvo las diferencias en la sintaxis de las declaraciones y llamadas.
Es incorrecto utilizar el modificador abstract para una propiedad estática.
Una propiedad abstracta heredada se puede reemplazar en una clase derivada si se incluye una declaración de propiedad que utilice el modificador override.
Para obtener más información sobre las clases abstractas, vea Clases y miembros de clase abstractos y sellados (Guía de programación de C#).
Una clase abstracta debe proporcionar implementaciones para todos los miembros de la interfaz.
Una clase abstracta que implementa una interfaz podría asignar los métodos de la interfaz a métodos abstractos. Por ejemplo:
interface I
{
void M();
}
abstract class C : I
{
public abstract void M();
}
En este ejemplo, la clase DerivedClass se deriva de una clase abstracta BaseClass. La clase abstracta contiene un método abstracto, AbstractMethod, y dos propiedades abstractas, X y Y.
abstract class BaseClass // Abstract class
{
protected int _x = 100;
protected int _y = 150;
public abstract void AbstractMethod(); // Abstract method
public abstract int X { get; }
public abstract int Y { get; }
}
class DerivedClass : BaseClass
{
public override void AbstractMethod()
{
_x++;
_y++;
}
public override int X // overriding property
{
get
{
return _x + 10;
}
}
public override int Y // overriding property
{
get
{
return _y + 10;
}
}
static void Main()
{
DerivedClass o = new DerivedClass();
o.AbstractMethod();
Console.WriteLine("x = {0}, y = {1}", o.X, o.Y);
}
}
// Output: x = 111, y = 161
En el ejemplo anterior, si intenta crear una instancia de la clase abstracta mediante una instrucción como la siguiente:
BaseClass bc = new BaseClass(); // Error
se obtendrá un error que indica que el compilador no puede crear una instancia de la clase abstracta 'BaseClass'.
Especificación del lenguaje C#
Para obtener más información, vea las secciones siguientes de Especificación del lenguaje C#.
1.6.5.4 Métodos virtuales, abstractos y de reemplazo
10.1.1.1 Clases abstractas
Vea también
Conceptos
Referencia
Modificadores (Referencia de C#)