abstract (Referência de C#)

O abstract modificadora indica que a coisa que está sendo modificada tem uma implementação incompleta ou ausente. O abstract modificador pode ser usado com classes, métodos, propriedades, indexadores, e eventos Use o abstract modificador em uma declaração de classe para indicar que uma classe destina-se somente a ser uma classe base de outras classes. Membros marcados como Abstract, ou incluídos em uma classe abstrata, devem ser implementados pelas classes que derivam da classe abstrata.

Exemplo

Neste exemplo, a classe Square deve fornecer uma implementação de Area porque ele 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

Classes abstratas tem os seguintes recursos:

  • Uma classe abstrata não pode ser instanciada.

  • Uma classe abstrata pode conter métodos abstratos e assessores.

  • Não é possível modificar uma classe abstrata com o sealed (Referência de C#) modificador porque os dois modifers têm um significado oposto. O sealed modificador impede que uma classe sendo herdadas e o abstract modificador requer uma classe para ser herdada.

  • Uma classe não-abstratas derivada de uma classe abstrata deve incluir reais implementações de todos os métodos abstratos e assessores herdados.

Use o abstract modificador em uma declaração de método ou propriedade para indicar que o método ou propriedade não contém implementação.

Métodos abstratos ter os seguintes recursos:

  • Um método Abstract é implicitamente um método virtual.

  • Método Abstract declarações só são permitidas em classes abstratas.

  • Porque uma declaração de método abstract não fornece nenhuma implementação real, não existe nenhum corpo de método; a declaração de método simplesmente acaba com um ponto-e-vírgula e não existe nenhuma chave ({ }) seguindo a assinatura. Por exemplo:

    public abstract void MyMethod();
    

    A implementação é fornecida por um método de substituiçãooverride (Referência de C#), que é um membro de uma classe non-abstract.

  • É um erro para usar o estático ou virtual modificadores em uma declaração de método abstract.

Propriedades abstratas se comportam como métodos abstratos, exceto para as diferenças na sintaxe declaração e chamada.

  • É um erro para usar o abstract modificador em uma propriedade estática.

  • Uma propriedade herdada abstrata pode ser substituída em uma classe derivada, incluindo uma declaração de propriedade que usa o Substituir modificador.

Para obter mais informações sobre classes abstratas, consulte Classes e membros de classes abstract e sealed (Guia de Programação em C#).

Uma classe abstrata deve fornecer implementação para todos os membros de interface.

Uma classe abstrata que implementa uma interface pode mapear os métodos interface em métodos abstratos. Por exemplo:

interface I
{
    void M();
}
abstract class C : I
{
    public abstract void M();
}

Neste exemplo, a classe DerivedClass é derivada de uma classe BaseClass abstrata. A classe abstrata contém um método Abstract, AbstractMethod,. e duas propriedades X abstratas e 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

No exemplo anterior se você tentar criar a classe abstrata usando uma instrução como este:

BaseClass bc = new BaseClass();   // Error

Você receberá um erro informando que o compilador Não é possível criar uma instância da classe abstrata ' BaseClass '.

Especificação da linguagem C#

Para obter mais informações, consulte a Especificação da linguagem C#. A especificação da linguagem é a fonte definitiva para a sintaxe e o uso de C#.

Consulte também

Referência

Modificadores (Referência de C#)

virtual (Referência de C#)

override (Referência de C#)

Palavras-chave C#

Conceitos

Guia de Programação em C#

Outros recursos

Referência de C#