Compartilhar via


Design de Interface

Observação

Esse conteúdo é reimpresso por permissão da Pearson Education, Inc. das Diretrizes de Design da Estrutura: Convenções, Idiomas e Padrões para Bibliotecas .NET Reutilizáveis, 2ª Edição. Essa edição foi publicada em 2008, e desde então o livro foi totalmente revisado na terceira edição. Algumas das informações nesta página podem estar desatualizadas.

Embora a maioria das APIs seja melhor modelada usando classes e structs, há casos em que as interfaces são mais apropriadas ou são a única opção.

O CLR não dá suporte a várias heranças (ou seja, classes CLR não podem herdar de mais de uma classe base), mas permite que os tipos implementem uma ou mais interfaces além de herdar de uma classe base. Portanto, as interfaces geralmente são usadas para obter o efeito de herança múltipla. Por exemplo, IDisposable é uma interface que permite que os tipos ofereçam suporte à eliminação, independentemente de qualquer outra hierarquia de herança na qual desejam participar.

A outra situação em que a definição de uma interface é apropriada está na criação de uma interface comum que pode ser suportada por vários tipos, incluindo alguns tipos de valor. Os tipos de valor não podem herdar de tipos diferentes ValueType, mas podem implementar interfaces, portanto, usar uma interface é a única opção para fornecer um tipo base comum.

✔️ Defina uma interface se você precisar que alguma API comum seja suportada por um conjunto de tipos que inclua tipos de valor.

✔️ CONSIDERE definir uma interface se você precisar dar suporte à sua funcionalidade em tipos que já herdam de algum outro tipo.

❌ EVITE o uso de interfaces de marcador (interfaces sem membros).

Se você precisar marcar uma classe como tendo uma característica específica (marcador), em geral, use um atributo personalizado em vez de uma interface.

✔️ Assegure-se de fornecer pelo menos um tipo que seja uma implementação de uma interface.

Fazer isso ajuda a validar o design da interface. Por exemplo, List<T> é uma implementação da IList<T> interface.

✔️ O DO fornece pelo menos uma API que consome cada interface que você define (um método que usa a interface como um parâmetro ou uma propriedade digitada como a interface).

Fazer isso ajuda a validar o design da interface. Por exemplo, List<T>.Sort consome a System.Collections.Generic.IComparer<T> interface.

❌ NÃO adicione membros a uma interface que tenha sido lançada anteriormente.

Isso interromperia as implementações da interface. Você deve criar uma nova interface para evitar problemas de controle de versão.

Com exceção das situações descritas nessas diretrizes, você deve, em geral, escolher classes em vez de interfaces na criação de bibliotecas reutilizáveis de código gerenciado.

Partes © 2005, 2009 Microsoft Corporation. Todos os direitos reservados.

Reimpresso por permissão da Pearson Education, Inc. de Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition de Krzysztof Cwalina e Brad Abrams, publicado em 22 de outubro de 2008 pela Addison-Wesley Professional como parte da série Microsoft Windows Development Series.

Consulte também