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 |