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

Uma interface contém definições para um grupo de funcionalidades relacionadas que uma classe ou um struct pode implementar.An interface contains definitions for a group of related functionalities that a class or a struct can implement.

Usando interfaces, você pode, por exemplo, incluir o comportamento de várias fontes em uma classe.By using interfaces, you can, for example, include behavior from multiple sources in a class. Essa funcionalidade é importante em C# porque a linguagem não dá suporte a várias heranças de classes.That capability is important in C# because the language doesn't support multiple inheritance of classes. Além disso, use uma interface se você deseja simular a herança para structs, pois eles não podem herdar de outro struct ou classe.In addition, you must use an interface if you want to simulate inheritance for structs, because they can't actually inherit from another struct or class.

Você define uma interface usando a palavra-chave interface, como mostra o exemplo a seguir.You define an interface by using the interface keyword, as the following example shows.

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

Qualquer classe ou struct que implemente a interface IEquatable<T> deve conter uma definição para um método Equals que corresponda à assinatura que a interface especifica.Any class or struct that implements the IEquatable<T> interface must contain a definition for an Equals method that matches the signature that the interface specifies. Como resultado, você pode contar com uma classe que implementa IEquatable<T> para conter um método Equals com o qual uma instância da classe pode determinar se é igual a outra instância da mesma classe.As a result, you can count on a class that implements IEquatable<T> to contain an Equals method with which an instance of the class can determine whether it's equal to another instance of the same class.

A definição de IEquatable<T> não fornece uma implementação para Equals.The definition of IEquatable<T> doesn’t provide an implementation for Equals. A interface define somente a assinatura.The interface defines only the signature. Dessa forma, uma interface em C# é semelhante a uma classe abstrata, na qual todos os métodos são abstratos.In that way, an interface in C# is similar to an abstract class in which all the methods are abstract. No entanto, uma classe ou struct pode implementar várias interfaces, mas uma classe pode herdar apenas uma única classe, abstrata ou não.However, a class or struct can implement multiple interfaces, but a class can inherit only a single class, abstract or not. Assim, ao usar interfaces, você pode incluir o comportamento de várias fontes em uma classe.Therefore, by using interfaces, you can include behavior from multiple sources in a class.

Para obter mais informações sobre classes abstratas, consulte Classes e membros de classes abstratos e lacrados.For more information about abstract classes, see Abstract and Sealed Classes and Class Members.

As interfaces podem conter métodos, propriedades, eventos, indexadores ou qualquer combinação desses quatro tipos de membro.Interfaces can contain methods, properties, events, indexers, or any combination of those four member types. Para obter links para exemplos, consulte as seções relacionadas.For links to examples, see Related Sections. Uma interface não pode conter constantes, campos, operadores, construtores de instância, finalizadores ou tipos.An interface can't contain constants, fields, operators, instance constructors, finalizers, or types. Os membros da interface são automaticamente públicos e eles não podem incluir nenhum modificador de acesso.Interface members are automatically public, and they can't include any access modifiers. Os membros também não podem ser estáticos.Members also can't be static.

Para implementar um membro de interface, o membro correspondente da classe de implementação deve ser público, não estático e ter o mesmo nome e assinatura do membro de interface.To implement an interface member, the corresponding member of the implementing class must be public, non-static, and have the same name and signature as the interface member.

Quando uma classe ou struct implementa uma interface, a classe ou o struct deve fornecer uma implementação para todos os membros que a interface define.When a class or struct implements an interface, the class or struct must provide an implementation for all of the members that the interface defines. A interface não fornece nenhuma funcionalidade que uma classe ou um struct possa herdar da forma que ela pode herdar a funcionalidade da classe base.The interface itself provides no functionality that a class or struct can inherit in the way that it can inherit base class functionality. No entanto, se uma classe base implementa uma interface, qualquer classe que é derivada da classe base herda essa implementação.However, if a base class implements an interface, any class that's derived from the base class inherits that implementation.

O exemplo a seguir mostra uma implementação da interface IEquatable<T>.The following example shows an implementation of the IEquatable<T> interface. A classe de implementação, Car, deverá fornecer uma implementação do método Equals.The implementing class, Car, must provide an implementation of the Equals method.

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)
    {
        return this.Make == car.Make &&
               this.Model == car.Model &&
               this.Year == car.Year;
    }
}

As propriedades e os indexadores de uma classe podem definir acessadores extras para uma propriedade ou o indexador que é definido em uma interface.Properties and indexers of a class can define extra accessors for a property or indexer that's defined in an interface. Por exemplo, uma interface pode declarar uma propriedade que tem um acessador get.For example, an interface might declare a property that has a get accessor. A classe que implementa a interface pode declarar a mesma propriedade tanto com um acessador get quanto com um set.The class that implements the interface can declare the same property with both a get and set accessor. No entanto, se a propriedade ou o indexador usa a implementação explícita, os acessadores devem corresponder.However, if the property or indexer uses explicit implementation, the accessors must match. Para obter mais informações sobre a implementação explícita, consulte Implementação de interface explícita e Propriedades da interface.For more information about explicit implementation, see Explicit Interface Implementation and Interface Properties.

As interfaces podem implementar outras interfaces.Interfaces can implement other interfaces. Uma classe pode incluir uma interface várias vezes por meio das classes base que ela herda ou por meio de interfaces que outras interfaces implementam.A class might include an interface multiple times through base classes that it inherits or through interfaces that other interfaces implement. No entanto, a classe poderá fornecer uma implementação de uma interface apenas uma vez e somente se a classe declarar a interface como parte da definição de classe (class ClassName : InterfaceName).However, the class can provide an implementation of an interface only one time and only if the class declares the interface as part of the definition of the class (class ClassName : InterfaceName). Se a interface é herdada porque é herdada de uma classe base que implementa a interface, a classe base fornece a implementação dos membros da interface.If the interface is inherited because you inherited a base class that implements the interface, the base class provides the implementation of the members of the interface. No entanto, a classe derivada pode reimplementar os membros de interface em vez de usar a implementação herdada.However, the derived class can reimplement the interface members instead of using the inherited implementation.

Uma classe base também pode implementar membros de interface usando membros virtuais.A base class can also implement interface members by using virtual members. Nesse caso, uma classe derivada pode alterar o comportamento da interface substituindo os membros virtuais.In that case, a derived class can change the interface behavior by overriding the virtual members. Para obter mais informações sobre membros virtuais, consulte Polimorfismo.For more information about virtual members, see Polymorphism.

Resumo de InterfacesInterfaces Summary

Uma interface tem as propriedades a seguir:An interface has the following properties:

  • Uma interface é como uma classe base abstrata.An interface is like an abstract base class. Qualquer classe ou struct que implementa a interface deve implementar todos os seus membros.Any class or struct that implements the interface must implement all its members.

  • Uma interface não pode ser instanciada diretamente.An interface can't be instantiated directly. Seus membros são implementados por qualquer classe ou struct que implemente a interface.Its members are implemented by any class or struct that implements the interface.

  • As interfaces podem conter propriedades, indexadores, métodos e eventos.Interfaces can contain events, indexers, methods, and properties.

  • As interfaces não têm implementações de métodos.Interfaces contain no implementation of methods.

  • Uma classe ou struct pode implementar várias interfaces.A class or struct can implement multiple interfaces. Uma classe pode herdar uma classe base e também implementar uma ou mais interfaces.A class can inherit a base class and also implement one or more interfaces.

Nesta seçãoIn This Section

Implementação de interface explícitaExplicit Interface Implementation
Explica como criar um membro da classe que é específico para uma interface.Explains how to create a class member that’s specific to an interface.

Como implementar membros de interface explicitamenteHow to: Explicitly Implement Interface Members
Fornece um exemplo de como implementar explicitamente membros de interfaces.Provides an example of how to explicitly implement members of interfaces.

Como implementar membros de duas interfaces explicitamenteHow to: Explicitly Implement Members of Two Interfaces
Fornece um exemplo de como implementar explicitamente membros de interfaces com herança.Provides an example of how to explicitly implement members of interfaces with inheritance.

Seções relacionadasRelated Sections

Interfaces em Learning C# 3.0: Master the Fundamentals of C# 3.0 (Aprendendo C# 3.0: dominando os conceitos básicos do C# 3.0)Interfaces in Learning C# 3.0: Master the Fundamentals of C# 3.0

Consulte tambémSee Also

Guia de Programação em C#C# Programming Guide
HerançaInheritance