Back to blog
Overerving en interfaces in C#
Intermediate

Overerving en interfaces in C#

David De Lombaerde David De Lombaerde · juli 10, 2026 · 11 min read

Overerving: bouw voort op bestaande klassen

Met overerving (inheritance) kan een klasse alle eigenschappen en methoden overnemen van een andere klasse. De basisklasse (parent) biedt het fundament; de afgeleide klasse (child) voegt toe of overschrijft.

// Basisklasse
class CADObject
{
    public string Laag { get; set; } = "0";
    public string Kleur { get; set; } = "ByLayer";

    public virtual void Beschrijf()
    {
        Console.WriteLine($"CAD-object op laag '{Laag}'");
    }
}

// Afgeleide klasse
class Cirkel : CADObject
{
    public double Straal { get; set; }

    public override void Beschrijf()
    {
        Console.WriteLine($"Cirkel (r={Straal}) op laag '{Laag}'");
    }
}

class Lijn : CADObject
{
    public double Lengte { get; set; }

    public override void Beschrijf()
    {
        Console.WriteLine($"Lijn ({Lengte} mm) op laag '{Laag}'");
    }
}

Polymorfisme: één type, veel gedragingen

Dankzij overerving kun je objecten van verschillende subklassen behandelen als de basisklasse:

List<CADObject> objecten = new List<CADObject>
{
    new Cirkel { Straal = 5.0, Laag = "Muren" },
    new Lijn   { Lengte = 200, Laag = "Maatvoering" },
    new Cirkel { Straal = 2.5, Laag = "Hulplijnen" },
};

foreach (CADObject obj in objecten)
{
    obj.Beschrijf();  // roept de juiste override aan!
}

abstract: verplicht overschrijven

Een abstract methode heeft geen implementatie in de basisklasse — elke subklasse moet haar zelf invullen:

abstract class Vorm
{
    public abstract double BerekenOppervlakte();
    public abstract double BerekenOmtrek();

    public void ToonResultaten()
    {
        Console.WriteLine($"Oppervlakte: {BerekenOppervlakte():F2}");
        Console.WriteLine($"Omtrek:      {BerekenOmtrek():F2}");
    }
}

class Rechthoek : Vorm
{
    public double Breedte { get; set; }
    public double Hoogte  { get; set; }

    public override double BerekenOppervlakte() => Breedte * Hoogte;
    public override double BerekenOmtrek()      => 2 * (Breedte + Hoogte);
}

Interfaces: afspraken zonder implementatie

Een interface is een lijst van methode-handtekeningen. Klassen die de interface implementeren beloven die methoden te voorzien:

interface IExporteerbaar
{
    void ExporteerNaarPDF(string pad);
    void ExporteerNaarDXF(string pad);
}

interface IPrintbaar
{
    void Print(string printer);
}

class Tekening : IExporteerbaar, IPrintbaar
{
    public string Naam { get; set; } = "";

    public void ExporteerNaarPDF(string pad)
        => Console.WriteLine($"{Naam} geëxporteerd naar {pad}.pdf");

    public void ExporteerNaarDXF(string pad)
        => Console.WriteLine($"{Naam} geëxporteerd naar {pad}.dxf");

    public void Print(string printer)
        => Console.WriteLine($"{Naam} verzonden naar {printer}");
}

Interface vs abstract klasse

InterfaceAbstract klasse
Meerdere mogelijk?JaNee (één basisklasse)
Standaard implementatie?Optioneel (C# 8+)Ja
Gebruik voorAfspraken / capabilitiesGedeeld gedrag

In de volgende post leren we hoe we fouten netjes afhandelen met try/catch.

Share this article

LinkedIn WhatsApp X

Comments

No comments yet — be the first!

Leave a comment

Sign in to skip moderation — anonymous comments are reviewed before appearing.