Erkunden der Standardschnittstellenimplementierung

Abgeschlossen

Mit Standardschnittstellenimplementierungen können Sie neue Methoden direkt zu einer Schnittstelle hinzufügen und eine Standardimplementierung bereitstellen. Eine Klasse, die diese Schnittstelle verwendet, kann entweder die Standardmethode verwenden oder eine eigene Implementierung überschreiben und bereitstellen.

Standardimplementierung

Mit Standardimplementierungen in Schnittstellen können Sie einer Schnittstelle neue Methoden hinzufügen, ohne Probleme zu verursachen.

  • Eine Schnittstelle kann einen Textkörper für seine Methoden mithilfe von Standardimplementierungen bereitstellen.
  • Klassen, die die Schnittstelle verwenden, müssen keine eigenen Versionen dieser Methoden schreiben.
  • Dieses Feature hilft, wenn Sie die Schnittstelle ändern möchten, ohne etwas zu unterbrechen.

Hinweis

Selbst bei Standardimplementierungen ruft eine Klasse nicht automatisch die Methoden der Schnittstelle ab. Um eine Methode aus der Schnittstelle zu verwenden, muss die Variable vom Schnittstellentyp sein.

Vorteile

Standardimplementierungen in Schnittstellen haben mehrere Vorteile:

  • Codewiederverwendung: Sie können gemeinsame Funktionen in verschiedenen Implementierungen freigeben, ohne Code zu kopieren.
  • Abwärtskompatibilität: Sie können Schnittstellen neue Methoden hinzufügen, ohne alle Klassen mithilfe der Schnittstelle zu ändern, um unterbrechungslose Änderungen zu verhindern.
  • Flexibilität: Klassen, die die Schnittstelle verwenden, können die Standardimplementierung ändern, wenn sie ein anderes Verhalten benötigen.

Angenommen, Sie arbeiten mit einem Kundenverwaltungssystem und fügen eine neue Methode hinzu, um einen Treuerabatt auf eine vorhandene Schnittstelle anzuwenden. Die Standardmethode berechnet einen grundlegenden Rabatt. Wenn jedoch eine VIP-Kundenklasse eine andere Berechnung benötigt, kann sie diese Methode ändern.

Definieren von Standardimplementierungen

Die Syntax zum Definieren von Standardimplementierungen in Schnittstellen erweitert die Schnittstellendeklaration, um Methodentexte einzuschließen. Im folgenden Beispiel wird eine Standardimplementierung in einer Schnittstelle basierend auf einem Szenario des Kundenverwaltungssystems definiert:

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

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

In diesem Beispiel verfügt die ApplyLoyaltyDiscount Methode über eine Standardimplementierung innerhalb der ICustomer Schnittstelle. Die CustomerId Eigenschaft wird auch in der Schnittstelle definiert, verfügt aber nicht über eine Standardimplementierung.

Hinweis

Ab C# 8.0 können Schnittstellen Standardmethodenimplementierungen enthalten. Die Änderung ermöglicht es neuen Methoden, Schnittstellen hinzuzufügen, ohne vorhandenen Code zu unterbrechen. Klassen können diese Standardwerte verwenden oder eigene Implementierungen bereitstellen.

Implementieren Sie als Nächstes eine "VIPCustomer"-Klasse, die eine andere Rabattberechnung benötigt. Diese Klasse kann die ICustomer Schnittstelle implementieren, eine eigene Implementierung für die CustomerId Eigenschaft bereitstellen und die ApplyLoyaltyDiscount Methode wie folgt außer Kraft setzen:

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}.");
    }
}

In diesem Fall wendet die VIPCustomer Klasse einen Rabatt von 20% anstelle der standardmäßigen 10%an. Die CustomerId wird in der Nachricht beim Anwenden des Rabatts verwendet.

Standardimplementierungen in Schnittstellen ermöglichen das Hinzufügen neuer Methoden mit der in der Schnittstelle bereitgestellten Methodenimplementierung. Die Standardimplementierungen fördern die Wiederverwendung von Code, Abwärtskompatibilität und Flexibilität. Es ist ein praktisches Tool in C# Object-Oriented Programmierung, das die Anpassungsfähigkeit verbessert, ohne vorhandenen Code zu stören.