Interfaces no Common Type System
Uma interface define um contrato que especifica uma relação "poderá ser" ou um "tem uma" relação.Interfaces são freqüentemente usados para implementar a funcionalidade, sistema autônomo comparação e classificação (o IComparable e IComparable<T> interfaces), teste de igualdade (a IEquatable<T> interface), ou enumerar itens em uma coleção (o IEnumerable e IEnumerable<T> interfaces). Interfaces podem ter propriedades, métodos e eventos, que são membros abstratos; ou seja, enquanto a interface define os membros e suas assinaturas, ele deixa para o tipo que implementa a interface para definir a funcionalidade de cada membro de interface.Isso significa que qualquer classe ou estrutura que implementa uma interface deve fornecer definições para os membros abstratos declarados na interface.Uma interface pode exigir que qualquer classe ou estrutura de implementação também deve implementar uma ou mais interfaces.
As restrições a seguir se aplicam a interfaces:
Uma interface pode ser declarada com qualquer acessibilidade, mas todos membros de interface devem ter acessibilidade pública.
Nenhuma permissão de segurança pode ser anexada a membros ou à própria interface.
Interfaces não podem definir construtores.
Interfaces não podem definir campos.
Todos as propriedades, métodos e eventos abstratos definidos em uma interface devem ser membros de instância; eles não podem ser membros estáticos.
Cada linguagem deve fornecer regras para mapear uma implementação para a interface que requer o membro, de maneira que mais de uma interface possa declarar um membro com a mesma assinatura e esses membros possam ter implementações separadas.