Compartilhar via


Classes e membros de classes abstract e sealed (Guia de Programação em C#)

A palavra-chave abstrata permite que você crie classes e membros de classe que estão incompletos e devem ser implementados em uma classe derivada.

A palavra-chave lacrada permite que você evite a herança de uma classe ou membros da classe que foram anteriormente marcados por virtual.

Classes e membros de classe abstratos

As classes podem ser declaradas como abstratas inserindo a palavra-chave abstract antes da definição de classe. Por exemplo:

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

Uma classe abstrata não pode ser instanciada. O objetivo de uma classe abstrata é fornecer uma definição comum de uma classe base que várias classes derivadas podem compartilhar. Por exemplo, uma biblioteca de classe pode definir uma classe abstrata que é usada como um parâmetro para muitas de suas funções e exigir que os programadores que usam essa biblioteca forneçam sua própria implementação da classe criando uma classe derivada.

As classes abstratas também podem definir métodos abstratos. Isso é feito adicionando a palavra-chave abstract antes do tipo de retorno do método. Por exemplo:

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

Os métodos abstratos não possuem implementação, portanto, a definição do método é seguida por um ponto em vez de um bloco normal do método. As classes derivadas da classe abstrata devem implementar todos os métodos abstratos. Quando uma classe abstrata herda um método virtual de uma classe base, a classe abstrata pode substituir o método virtual por um método abstrato. Por exemplo:

// 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.
    }
}

Se um método de virtual for declarado abstract, ele continuará virtual para qualquer classe que herda da classe abstrata. Uma classe que herda um método abstrato não pode acessar a implementação original do método no exemplo anterior, DoWork na classe F não pode chamar DoWork na classe D. Dessa forma, uma classe abstrata pode forçar classes derivadas a fornecer novos implementações de método para métodos virtuais.

Classes e membros da classe fechados

As classes podem ser declaradas como lacradas inserindo a palavra-chave sealed antes da definição de classe. Por exemplo:

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

Uma classe lacrada não pode ser usada como classe base. Por esse motivo, ela não pode ser também uma classe abstrata. As classes fechadas impedem a derivação. Como elas nunca podem ser usadas como uma classe base, algumas otimizações de tempo de execução podem agilizar as chamadas aos membros de classe lacrada.

Um método, marcador, propriedade, ou um evento, em uma classe derivada que está substituindo um membro virtual da classe base pode declarar esse membro como lacrado. Isso nega o aspecto virtual de membro para qualquer classe derivada adicional. Isso é feito colocando a palavra-chave de sealed antes de palavras-chave de substituição na declaração de membro de classe. Por exemplo:

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

Consulte também

Tarefas

Como definir propriedades abstract (Guia de Programação em C#)

Referência

Classes e structs (Guia de Programação em C#)

Herança (Guia de Programação em C#)

Métodos (Guia de Programação em C#)

Campos (Guia de Programação em C#)

Conceitos

Guia de Programação em C#