Interfaces (C# Programming Guide)

Interfaces descrevem um grupo de funcionalidades relacionadas que podem pertencer a qualquer classe ou struct. Você define uma interface usando o interface palavra-chave, como mostrado no exemplo a seguir.

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

Interfaces consistem de métodos, propriedades, eventos, indexadores ou qualquer combinação desses quatro tipos de membro. Uma interface não pode conter constantes, campos, operadores, construtores de instância, destruidores ou tipos. Ele não pode conter membros estáticos. Os membros de interfaces são públicos automaticamente e eles não podem incluir qualquer modificadores de acesso.

Quando uma classe ou struct implementa uma interface, a classe ou struct fornece uma implementação para todos os membros definidos pela interface. A própria interface não fornece nenhuma funcionalidade que uma class ou struct podem herdar de forma que a funcionalidade da classe base pode ser herdada. No entanto, se uma classe base implementa uma interface, a classe derivada herda essa implementação. A classe derivada é considerada para implementar a interface implicitamente.

Classes e estruturas implementam interfaces de maneira semelhante a como as classes herdam uma classe base ou struct, com duas exceções:

  • Class ou struct pode implementar mais de uma interface.

  • Quando uma classe ou struct implementa uma interface, ele recebe apenas os nomes de método e assinaturas, porque a própria interface não contém implementações de nenhum, conforme mostrado no exemplo a seguir.

    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;
        }
    }
    

O IEquatable<T> interface apresenta ao usuário do objeto que o objeto pode determinar se é igual a outros objetos do mesmo tipo e da interface do usuário não precisa saber como isso é implementado.

Para implementar um membro da interface, o membro correspondente da classe deve ser público, non-static e ter o mesmo nome e assinatura do membro de interface. Propriedades e os indexadores de uma classe podem definir acessadores extras para uma propriedade ou indexador definida em uma interface. Por exemplo, uma interface pode declarar uma propriedade que possui um get acessador. A classe que implementa a interface pode declarar a mesma propriedade com ambos um obter e set acessador. No entanto, se a propriedade ou indexador usa a implementação explícita, os acessadores devem corresponder. Para obter mais informações sobre a implementação explícita, consulteInterface de Propriedades (guia de programação C#)

Interfaces e os membros de interface são abstratos; interfaces não fornecem uma implementação padrão. Para obter mais informações, consulte Abstract e Sealed Classes e membros da classe.

Interfaces podem herdar de outras interfaces. É possível que uma classe herdar de uma interface várias vezes, através de classes base, que ela herda ou por meio de interfaces herdadas por outras interfaces. No entanto, a classe pode implementar uma interface em apenas uma hora e somente se a interface está declarada como parte da definição da classe, como em class ClassName : InterfaceName. Se a interface é herdada porque você herdada de uma classe base que implementa a interface, sua implementação é fornecida pela classe base. Também é possível que uma classe base 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.

Visão geral de interfaces

Uma interface tem as seguintes propriedades:

  • Uma interface é como uma classe base abstrata: qualquer tipo non-abstract que implementa a interface deve implementar todos os seus membros.

  • Uma interface não pode ser instanciada diretamente.

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

  • Interfaces não contêm implementações dos métodos.

  • Classes e structs pode implementar mais de uma interface.

  • Ele mesmo uma interface pode herdar de várias interfaces.

Nesta seção

Seções relacionadas

Capítulo do livro em destaque

InterfacesemLearning C# 3.0: Master the Fundamentals of C# 3.0

Consulte também

Referência

Inheritance (C# Programming Guide)

Conceitos

C# Programming Guide

Histórico de alterações

Date

History

Motivo

Julho de 2010

Distintos entre a implementação e a herança. Esclarecida o que pode e não pode ser incluído em interfaces.

Comentários do cliente.