Explore a implementação da interface padrão

Concluído

As implementações de interface padrão permitem que você adicione novos métodos diretamente em uma interface e forneça uma implementação padrão. Uma classe que usa essa interface, pode usar o método padrão, ou pode substituir e fornecer sua própria implementação.

Implementações padrão

As implementações padrão em interfaces permitem adicionar novos métodos a uma interface sem causar problemas.

  • Uma interface pode fornecer um corpo para seus métodos usando implementações padrão.
  • As classes que usam a interface não precisam escrever suas próprias versões desses métodos.
  • Este recurso ajuda quando você quer alterar a interface sem quebrar nada.

Observação

Mesmo com implementações padrão, uma classe não obtém automaticamente os métodos da interface. Para usar um método da interface, a variável deve ser do tipo de interface.

Benefícios

As implementações padrão em interfaces têm vários benefícios:

  • Reutilização de código: Você pode compartilhar funções comuns em diferentes implementações sem copiar código.
  • Compatibilidade com versões anteriores: Você pode adicionar novos métodos às interfaces sem precisar alterar todas as classes que usam a interface para evitar interrupções.
  • Flexibilidade: As classes que usam a interface podem alterar a implementação padrão se precisarem de um comportamento diferente.

Por exemplo, digamos que você esteja trabalhando com um sistema de gerenciamento de clientes e adicione um novo método para aplicar um desconto de fidelidade em uma interface existente. O método padrão calcula um desconto básico. Mas se uma classe de "cliente VIP" precisar de um cálculo diferente, ela pode modificar esse método.

Definir implementações padrão

A sintaxe para definir implementações padrão em interfaces estende a declaração de interface para incluir corpos de método. O exemplo a seguir define uma implementação padrão em uma interface baseada em um cenário de sistema de gerenciamento de clientes:

interface ICustomer
{
    int CustomerId { get; set; } // No default implementation

    void ApplyLoyaltyDiscount() 
    { 
        // default implementation
        Console.WriteLine("Applying 10% loyalty discount."); 
    }
}

Neste exemplo, o ApplyLoyaltyDiscount método tem uma implementação padrão dentro da ICustomer interface. A CustomerId propriedade também é definida na interface, mas não tem uma implementação padrão.

Observação

A partir do C# 8.0, as interfaces podem incluir implementações de método padrão. A mudança permite que novos métodos sejam adicionados às interfaces sem quebrar o código existente. As classes podem usar esses padrões ou fornecer suas próprias implementações.

Em seguida, implemente uma classe "VIPCustomer" que precise de um cálculo de desconto diferente. Essa classe pode implementar a ICustomer interface, fornecer sua própria implementação para a CustomerId propriedade e substituir o ApplyLoyaltyDiscount método assim:

class VIPCustomer : ICustomer
{
    public int CustomerId { get; set; } // Implementing property from interface

    void ICustomer.ApplyLoyaltyDiscount()
    {
        // override default implementation for VIP customers
        Console.WriteLine($"Applying 20% loyalty discount for VIP customer with ID {CustomerId}.");
    }
}

Nesse caso, a VIPCustomer classe aplica um desconto de 20% em vez dos 10%padrão. O CustomerId é usado na mensagem ao aplicar o desconto.

Implementações padrão em interfaces permitem a adição de novos métodos com a implementação de método fornecida na interface. As implementações padrão promovem a reutilização de código, compatibilidade com versões anteriores e flexibilidade. É uma ferramenta prática em C# Object-Oriented Programming que melhora a adaptabilidade sem interromper o código existente.