Sobes.tech
Junior

Haben Sie abstrakte Klassen in Ihren Projekten verwendet?

sobes.tech KI

Antwort von AI

Ja, ich habe es benutzt. Abstrakte Klassen wurden verwendet, um grundlegende Strukturen mit gemeinsamen Methoden und Eigenschaften zu erstellen, die dann von konkreten Klassen vererbt werden.

// Deklaration einer abstrakten Klasse
public abstract class Shape
{
    // Abstrakte Methode, die in den vererbenden Klassen implementiert werden muss
    public abstract double GetArea();

    // Virtuelle Methode mit Standardimplementierung, die überschrieben werden kann
    public virtual void Draw()
    {
        Console.WriteLine("Zeichne eine Form.");
    }
}

// Konkrete Klasse, die von Shape erbt
public class Circle : Shape
{
    public double Radius { get; set; }

    public Circle(double radius)
    {
        Radius = radius;
    }

    // Implementierung der abstrakten Methode
    public override double GetArea()
    {
        return Math.PI * Radius * Radius;
    }

    // Überschreiben der virtuellen Methode
    public override void Draw()
    {
        Console.WriteLine($"Zeichne einen Kreis mit Radius {Radius}.");
    }
}

Hauptanwendungsfälle:

  • Definition eines allgemeinen Vertrags: Abstrakte Klassen ermöglichen es, eine Reihe von Methoden und Eigenschaften festzulegen, die in allen abgeleiteten Klassen vorhanden sein müssen.
  • Teilweise Implementierung: Möglichkeit, eine teilweise Implementierung der Funktionalität in der Basisklasse bereitzustellen, um vollständige Duplizierung im Erben zu vermeiden.
  • Entwurfsmuster: Werden häufig bei der Implementierung von Mustern wie dem "Template Method" verwendet.

Unterschiede zu Schnittstellen:

Merkmal Abstrakte Klasse Schnittstelle
Vererbung Mehrfache Vererbung verboten Mehrfache Implementierung erlaubt
Implementierung Kann Methodenimplementierungen enthalten Bis C# 8.0 - nur Deklarationen, danach - Standardimplementierungen
Mitglieder Kann Felder, Konstruktoren, virtuelle/abstrakte/gewöhnliche Methoden haben Bis C# 8.0 - nur Methoden und Eigenschaften, danach auch statische Mitglieder und Default-Implementierungen
Zustand Kann Zustand haben (über Felder) Kann keinen Zustand haben