Junior
Heeft u abstracte klassen gebruikt in uw projecten?
sobes.tech AI
Antwoord van AI
Ja, ik heb het gebruikt. Abstracte klassen werden gebruikt om basisstructuren te creëren met gemeenschappelijke methoden en eigenschappen, die vervolgens door specifieke klassen worden geërfd.
// Declaratie van een abstracte klasse
public abstract class Shape
{
// Abstracte methode die geïmplementeerd moet worden in afgeleide klassen
public abstract double GetArea();
// Virtuele methode met standaardimplementatie, die overschreven kan worden
public virtual void Draw()
{
Console.WriteLine("Tekening van een vorm.");
}
}
// Concrete klasse die erft van Shape
public class Circle : Shape
{
public double Radius { get; set; }
public Circle(double radius)
{
Radius = radius;
}
// Implementatie van de abstracte methode
public override double GetArea()
{
return Math.PI * Radius * Radius;
}
// Overschrijven van de virtuele methode
public override void Draw()
{
Console.WriteLine($"Tekening van een cirkel met straal {Radius}.");
}
}
Belangrijkste gebruiksscenario's:
- Definitie van een algemeen contract: Abstracte klassen maken het mogelijk om een set methoden en eigenschappen vast te leggen die in alle afgeleide klassen aanwezig moeten zijn.
- Gedeeltelijke implementatie: Mogelijkheid om een gedeeltelijke implementatie van functionaliteit in de basisklasse te bieden, waardoor volledige duplicatie in de afgeleide klassen wordt voorkomen.
- Ontwerppatroon: Wordt vaak gebruikt bij de implementatie van patronen zoals de "Template Method".
Verschillen met interfaces:
| Kenmerk | Abstracte klasse | Interface |
|---|---|---|
| Erfenis | Meervoudige erfenis niet toegestaan | Meervoudige implementatie toegestaan |
| Implementatie | Kan methodenimplementaties bevatten | Tot C# 8.0 - alleen declaraties, daarna - standaardimplementaties |
| Leden | Kan velden, constructeurs, virtuele/abstracte/gewone methoden bevatten | Tot C# 8.0 - alleen methoden en eigenschappen, daarna - ook statische leden en standaardimplementaties |
| Toestand | Kan toestand hebben (via velden) | Kan geen toestand hebben |