Escolhendo entre Classes e Interfaces

Uma interface define as assinaturas de um conjunto de membros implementadores devem fornecer. Interfaces não podem fornecer detalhes de implementação para os membros. Por exemplo, o ICollection interface define os membros relacionados ao trabalhar com coleções. Cada classe que implementa a interface deve fornecer os detalhes de implementação para membros de theses. Classes podem implementar várias interfaces.

Classes definem os detalhes de implementação e assinaturas de membros para cada membro. Abstract(MustInherit em Visual Basic) classes podem se comportar como interfaces ou regular classes em que eles podem definir membros, e pode fornecer detalhes de implementação, mas não são necessários para fazer o SO. Se uma classe abstrata não fornecer detalhes de implementação, as classes concretas que herdam da classe abstrata são necessários para fornecer a implementação.

Embora ambos abstraem separando o contrato de implementação de suporte de classes e interfaces, interfaces não é possível especificar novos membros em versões posteriores enquanto classes abstratas podem adicionar membros conforme necessário para suportar a funcionalidade adicional.

Favorecer a definição de classes por meio de interfaces.

Com segurança em versões posteriores da sua biblioteca, você pode adicionar novos membros a classes; é possível adicionar membros a interfaces sem quebrar o código existente.

Use classes abstratas de (MustInherit em Visual Basic) em vez de interfaces para dissociar o contrato de implementações.

Defina uma interface, se você precisar fornecer uma hierarquia polimórfica de tipos de valor.

Tipos de valor devem herdar de ValueTypee só pode herdar de ValueType, portanto, eles não podem usar as classes para separar o contrato e implementação. Nesse caso, você deve usar uma interface se precisam de seus tipos de valor comportamento polimórfico.

Considere a definição de interfaces para obter um efeito semelhante de herança múltipla.

Se um tipo deve implementar vários contratos ou o contrato é aplicável a uma ampla variedade de tipos, use uma interface. Por exemplo, IDisposable é implementada por tipos usados em vários cenários diferentes. A necessidade de classes para herdar da classe base seja descartável tornaria a hierarquia da classe muito inflexível. Classes como MemoryStream, que devem herdar a seus contratos baseados em fluxo de suas classes pai, não seria capaz de fazer isso e também ser disposable.

Portions Copyright 2005 Microsoft Corporation. Todos os direitos reservados.

Portions Copyright Addison-Wesley Corporation. Todos os direitos reservados.

Para obter mais informações sobre as diretrizes de design, consulte a "diretrizes de Design do Framework: Convenções, idiomas e padrões de reutilizável.Bibliotecas de rede" catálogo por Krzysztof Cwalina e Brad Abrams, publicado pela Addison-Wesley, 2005.

Consulte também

Conceitos

Escolhendo entre Classes e estruturas

Outros recursos

Diretrizes de Design do tipo

Diretrizes de Design para desenvolvimento bibliotecas de classe