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, a ICollection interface define relacionados ao trabalho com conjuntos de membros. Cada classe que implementa a interface deve fornecer os detalhes de implementação para theses membros. Classes podem implementar várias interfaces.
Classes de definem as assinaturas de membros e os detalhes de implementação para cada membro. Abstract (MustInherit no Visual Basic) classes podem se comportam como interfaces ou classes comuns em que eles podem definir os membros e eles podem fornecer detalhes de implementação mas não serão necessário fazê-lo. Se uma classe abstrata não fornece detalhes de implementação, classes concretas que herdam da classe abstrata são necessários para fornecer a implementação.
Embora ambos abstraem o suporte a classes e interfaces separando o contrato de implementação, interfaces não é possível especificar novos membros em versões posteriores enquanto classes abstratas podem adicionar membros conforme necessário para oferecer suporte à funcionalidade adicional.
Favorecer definindo classes por meio de interfaces.
Nas versões posteriores da sua biblioteca, com segurança você pode adicionar novos membros às classes; não é possível adicionar membros a interfaces sem quebrar o código existente.
Use classes abstratas de (MustInherit no Visual Basic) em vez de interfaces para dissociar o contrato de implementações.
Defina uma interface caso você precise fornecer uma hierarquia de tipos de valor polimórfica.
Tipos de valor devem herdar de ValueTypee podem herdar somente de ValueType, para que ele não é possível usar classes para separar o contrato e implementação. Nesse caso, você deve usar uma interface se precisam de 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. Necessidade de classes para herdar de uma classe base seja descartável faria a hierarquia da classe muito inflexível. Classes, sistema autônomo MemoryStream, que devem herdar seus contratos com base em fluxo de suas classes pai, não seria capaz de então e também seja descartável.
Partes direitos autorais 2005 Microsoft Corporation. Todos os direitos reservados.
Partes direitos autorais Addison-Wesley Corporation. Todos os direitos reservados.
Para obter mais informações sobre diretrizes de design, consulte a "diretrizes de design do estrutura: Catálogo de convenções, idiomas e padrões para bibliotecas do .NET reutilizável"Krzysztof Cwalina e Brad Abrams, publicado pela Addison-Wesley, 2005.
Consulte também
Conceitos
Escolhendo entre estruturas e classes
Outros recursos
Diretrizes de Design para desenvolvimento bibliotecas de classe