Compartilhar via


Abstract and Sealed Classes and Class Members (C# Programming Guide)

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

O lacrado palavra-chave permite evitar que a herança de uma classe ou determinados membros da classe que foram marcados anteriormente virtual.

Classes abstratas e membros de classe

Classes podem ser declarados como abstrato, colocando-se 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. A finalidade de uma classe abstrata é fornecer uma definição de uma classe base que podem ser compartilhados por várias classes derivadas. Por exemplo, uma biblioteca de classes talvez defina uma classe abstrata que é usada como um parâmetro para muitas funções, e necessita que os programadores usem a biblioteca para fornecer suas próprias implementações de uma classe, criando uma classe derivada.

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);
}

Métodos abstratos não possuem implementação, portanto, a definição do método é seguida por um ponto e vírgula em vez de um bloco de método normal. 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 com 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 virtual método é declarado abstract, é ainda virtual para qualquer classe que herdam a classe de abstrata. Uma classe que herda um método abstrato não é possível acessar a implementação original do método — no exemplo anterior, DoWork na classe f não é possível chamar DoWork na classe d. Dessa forma, uma classe abstrata pode forçar a classes derivadas para fornecer novas implementações de método para métodos virtuais.

Classes seladas e membros de classe

Classes podem ser declarados como lacrado , colocando a palavra-chave sealed antes da definição de classe. Por exemplo:

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

Uma classe selada não pode ser usada como uma classe base. Por esse motivo, ele não pode ser também uma classe abstrata. Classes seladas impedem a derivação. Porque eles nunca podem ser usados como uma classe base, algumas otimizações de tempo de execução podem tornar membros de classe sealed chamada ligeiramente mais rápidos.

Um membro de classe, método, campo, propriedade ou evento, em uma classe derivada que está substituindo o membro virtual da classe base pode declarar esse membro como sealed. Isso anula o aspecto virtual do membro para qualquer classe derivada ainda mais. Isso é feito colocando o sealed palavra-chave antes de Substituir palavra-chave na declaração de membro da classe. Por exemplo:

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

Consulte também

Tarefas

How to: Definir abstratas Propriedades (guia de programação C#)

Referência

Classes e estruturas (guia de programação de C#)

Inheritance (C# Programming Guide)

Methods (C# Programming Guide)

Campos (guia de programação de C#)

Conceitos

C# Programming Guide