Sobes.tech
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