🎯 Objetivo: Dominadas as Classes Abstratas, vamos dar um passo adiante com as Interfaces. Elas são um conceito fundamental na Programação Orientada a Objetos em C# e nos permitem definir "contratos" de comportamento que as classes devem seguir, garantindo um design de software ainda mais flexível e desacoplado.
Imagine que você está em um restaurante. O menu é como um contrato. Ele diz o que o restaurante (a classe) pode "fazer" (os métodos) para você, como "servir prato principal", "servir sobremesa", "fazer a conta". O menu não diz como o chef vai preparar o prato ou como a conta será calculada, apenas que essas ações estão disponíveis.
Uma Interface em C# é exatamente isso: um contrato 100% abstrato. Ela define um conjunto de métodos que uma classe deve implementar. Uma interface não pode ter nenhuma implementação de método (tradicionalmente). Ela apenas declara "o quê" uma classe deve fazer, mas nunca "como" ela deve fazer.
Ponto Chave: Interfaces não possuem atributos (a não ser constantes static), nem construtores e, tradicionalmente, não possuem métodos concretos. Elas são puramente sobre comportamento.
Motivos:
Carro e um Avião são veículos, mas também podem ser MeioDeTransporte.Uma interface pode conter:
public): São os métodos que a classe que implementa a interface deve fornecer uma implementação. Por padrão, todos os métodos em uma interface são public, mesmo que você não declare explicitamente.public static readonly): Você pode definir constantes em uma interface. Em C#, elas são implicitamente public static readonly.Vamos pensar em animais. Alguns podem voar, outros não. Um Pato e um Avião podem ter o comportamento de "voar". Um Pinguim não voa. A capacidade de voar é um comportamento que pode ser aplicado a diferentes tipos de objetos, e é um caso perfeito para uma interface.
// Declaração de uma Interface
public interface IVoador // Note a palavra-chave 'interface'
{
// Método: Define o comportamento de voar
// É implicitamente public void Voar();
void Voar();
// Outro método: Define a altura máxima de voo
double GetAlturaMaximaVoo();
// Exemplo de constante em uma interface
// Por padrão é public static readonly
const string TIPO_VOO = "Atmosférico";
}
Neste exemplo:
IVoador é uma interface (marcada com interface). É uma convenção de C# prefixar interfaces com a letra I.Voar() e GetAlturaMaximaVoo(). Qualquer classe que implementar IVoador será obrigada a fornecer uma implementação para esses dois métodos.TIPO_VOO.