TOC

This article has been localized into Dutch by the community.

Klassen:

Meer abstracte klassen

In het vorige hoofdstuk hadden we het over abstracte klassen, laat ons nu nog wat verder gaan. We gaan het in dit hoofdstuk hebben over abstracte methoden. Abstrace methoden kan je enkel definiëren binnen abstracte klassen. Hun definitie mag er dan uitzien zoals een gewone methode, maar er zit geen code binnen een abstracte methode.

abstract class FourLeggedAnimal
{
    public abstract string Describe();
}

Waarom zou je nu een lege methode willen definiëren die niets doet? Omdat een abstracte methode methode een verplichting is als je die specifieke methode wil implementeren in alle subklassen. Dit wordt tijdens de compilatie gecontroleerd om zeker te zijn dat je subklassen deze methode gedefinieerd hebben. Dit is opnieuw een goeie manier om een basisklasse voor iets te creëren en toch enige controle te hebben over wat de subklasse zou moeten kunnen doen. Met dit in gedachten kan je een subklasse altijd op dezelfde manier behandelen als de basisklasse als je een als abstract gedefinieerde methode uit de basisklasse wil gebruiken. Bekijk even volgend voorbeeld:

namespace AbstractClasses
{
    class Program
    {
        static void Main(string[] args)
        {
            System.Collections.ArrayList animalList = new System.Collections.ArrayList();
            animalList.Add(new Dog());
            animalList.Add(new Cat());
            foreach(FourLeggedAnimal animal in animalList)
                Console.WriteLine(animal.Describe());
            Console.ReadKey();
        }
    }

    abstract class FourLeggedAnimal
    {
        public abstract string Describe();
    }


    class Dog : FourLeggedAnimal
    {

        public override string Describe()
        {
            return "I'm a dog!";
        }
    }

    class Cat : FourLeggedAnimal
    {
        public override string Describe()
        {
            return "I'm a cat!";
        }
    }
}

We maken een Arraylist om onze dieren in te bewaren. Dan maken we een nieuwe instantie van Dog en Cat en voegen deze toe aan onze lijst. Ze worden geïnstantieerd als respectievelijk Cat en Dog maar zijn ook van het type FourLeggedAnimal. En aangezien de compiler weet welke subklassen van de klasse FourLeggedAnimal allemaal de Describe() methode bevatten kan je die methode aanroepen zonder het exacte type van het dier te kennen. Door FourLeggedAnimal te typecasten (wat we doen in de foreach lus) krijgen we toegang tot de leden van de subklassen. Dit kan zeer handig zijn!

This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!