Sobes.tech
Junior — Middle

Was ist der Unterschied zwischen der Verwendung einer abstrakten Klasse und eines Interfaces bei der Definition von Verträgen für Klassen?

sobes.tech KI

Antwort von AI

Eine abstrakte Klasse und eine Schnittstelle in C# dienen dazu, Verträge zu definieren, weisen jedoch wesentliche Unterschiede auf:

  • Abstrakte Klasse kann Implementierungen von Methoden, Feldern, Konstruktoren und Eigenschaften enthalten. Sie wird verwendet, wenn eine Basiseinheit und gemeinsame Funktionalität für Erben festgelegt werden sollen.
  • Schnittstelle definiert nur die Signaturen von Methoden, Eigenschaften und Ereignissen ohne Implementierung (bis C# 8.0; ab C# 8.0 können Schnittstellen Standardimplementierungen enthalten).

Außerdem kann eine Klasse nur von einer abstrakten Klasse erben, aber mehrere Schnittstellen implementieren.

Beispiel:

abstract class Animal
{
    public abstract void MakeSound();
    public void Sleep() { Console.WriteLine("Schläft"); }
}

interface IFlyable
{
    void Fly();
}

class Bird : Animal, IFlyable
{
    public override void MakeSound() { Console.WriteLine("Zwitschern"); }
    public void Fly() { Console.WriteLine("Fliegen"); }
}

Auf diese Weise eignet sich die abstrakte Klasse für gemeinsames Grundverhalten, während die Schnittstelle eine Reihe von Fähigkeiten definiert, die von verschiedenen Klassen implementiert werden können.