Interfaces (Guia de Programação em C#)

Uma interface contém definições de um grupo de funcionalidades relacionadas que classe ou estrutura podem implementar.

Usando interfaces, você pode, por exemplo, incluindo o comportamento de várias fontes em uma classe. Esse recurso é importante em C# porque o idioma não oferece suporte a várias heranças de classes. Além disso, você deve usar uma interface se você deseja simular a herança para estruturas, porque realmente não podem herdar de outro estrutura ou classificação.

Você define uma interface de interface usando a palavra-chave, como mostra o exemplo a seguir.

interface IEquatable<T>
{
    bool Equals(T obj);
}

Qualquer classe ou estrutura o que implementa a interface de IEquatable deve conter uma definição de um método de Equals que corresponda à assinatura que especifica a interface. Como resultado, você pode contar em uma classe que implementa IEquatable<T> para conter um método de Equals com que uma instância da classe pode determinar se ele é igual a outra instância da mesma classe.

A definição de IEquatable<T> não fornecer uma implementação para Equals. A interface define apenas a assinatura. Nessa maneira, uma interface em C# é semelhante a uma classe abstrata em que todos os métodos são abstratas. No entanto, uma classe ou estrutura podem implementar interfaces múltiplas, mas uma classe pode herdar apenas uma única classe abstrata, ou não. Como consequência, usando interfaces, você pode incluir o comportamento de várias fontes em uma classe.

Para obter mais informações sobre as classes abstratas, consulte Classes e membros abstratos e sealed de classe.

Interfaces podem conter métodos, propriedades, eventos, indexadores, ou qualquer combinação desses quatro tipos de membros. Para links para exemplos, consulte Seções relacionadas. Uma interface não pode conter constantes, campos, operadores, construtores de instância, destruidores, ou tipos. Membros de interface são automaticamente públicos, e não podem incluir quaisquer modificadores de acesso. Os membros também não podem ser static.

Para implementar um membro de interface, o membro de classe correspondente implementando deve ser público, não estático, e tem o mesmo nome e assinatura que o membro de interface.

Quando uma classe ou estrutura implementa uma interface, a classe ou a estrutura devem fornecer uma implementação para todos os membros que a interface define. A própria interface não fornece nenhuma funcionalidade que uma classe ou estrutura podem herdar a forma que pode herdar a funcionalidade da classe base. No entanto, se uma classe base implementa uma interface, qualquer classe que é derivada da classe base herdará essa implementação.

O exemplo a seguir mostra uma implementação da interface de IEquatable<T> . A classe implementadora, Car, deve fornecer uma implementação do método de Equals .

public class Car : IEquatable<Car>
{
    public string Make {get; set;}
    public string Model { get; set; }
    public string Year { get; set; }

    // Implementation of IEquatable<T> interface 
    public bool Equals(Car car)
    {
        if (this.Make == car.Make &&
            this.Model == car.Model &&
            this.Year == car.Year)
        {
            return true;
        }
        else 
            return false;
    }
}

As propriedades e os indicadores de uma classe podem definir os assessores adicionais para uma propriedade ou um indexador que é definido em uma interface. Por exemplo, uma interface pode declarar uma propriedade que tenha um acessador de obter . A classe que implementa a interface pode declarar a mesma propriedade com get e o acessador de dataset . No entanto, se a propriedade ou o indicador usam a implementação explícita, os acessadores devem corresponder. Para obter mais informações sobre a implementação explícita, consulte Implementação de interface explícita (Guia de Programação em C#) e a Propriedades de interface (Guia de Programação em C#).

Interfaces podem implementar interfaces. Uma classe pode incluir uma interface várias vezes por meio de classes base que herda ou através das interfaces que implementam interfaces. No entanto, a classe pode fornecer uma implementação de uma interface apenas uma vez e somente se a classe declara a interface como parte da definição da classe (class ClassName : InterfaceName). Se a interface é herdada porque você herda uma classe base que implementa a interface, a classe base fornece a implementação dos membros da interface. No entanto, a classe derivada pode reimplementar membros de interface em vez de usar a implementação herdada.

Uma classe base também pode implementar membros de interface usando membros virtuais. Nesse caso, uma classe derivada pode alterar o comportamento da interface substituindo membros virtuais. Para obter mais informações sobre membros virtuais, consulte Polimorfismo.

Interfaces resumo

Uma interface tem as seguintes propriedades:

  • Uma interface é como uma classe base abstrata. Qualquer classe ou estrutura o que implementa a interface deve implementar todos os seus membros.

  • Uma interface não pode ser instanciada diretamente. Seus membros são implementados por qualquer classe ou estrutura que implementa a interface.

  • Interfaces podem conter eventos, indexadores, métodos, propriedades e.

  • As interfaces não contêm qualquer implementação dos métodos.

  • Uma classe ou estrutura podem implementar interfaces múltiplas. Uma classe pode herdar uma classe base e também implementar uma ou mais interfaces.

Nesta seção

Seções relacionadas

Capítulo caracterizado book

Interfaces em Aprendendo C# 3,0: Páginas mestras funcionam dos fundamentos C# 3,0

Consulte também

Referência

Herança (Guia de Programação em C#)

Conceitos

Guia de Programação em C#