ProgrammatieVB.NET ontwikkelaar

Hoe implementeer je een klassenhiërarchie met overerving en polymorfisme in Visual Basic? Beschrijf hoe je virtuele methoden (Overridable/Overrides) correct gebruikt en geef een voorbeeld van code met een basis- en afgeleide klasse.

Slaag voor sollicitatiegesprekken met de Hintsage AI-assistent

Antwoord

In Visual Basic .NET wordt overerving geïmplementeerd met behulp van het sleutelwoord Inherits. Dit stelt je in staat om klassenhiërarchieën te maken die gemeenschappelijke en herschrijfbare methoden en eigenschappen implementeren.

Om polymorfisme te ondersteunen, worden methoden in de basis klasse gedeclareerd met de modifier Overridable, en in de afgeleide klasse worden ze herschreven met Overrides. Om verdere herschrijving te voorkomen, wordt de modifier NotOverridable gebruikt.

Voorbeeld:

' Basis klasse Animal met een virtuele methode Public Class Animal Public Overridable Sub Speak() Console.WriteLine("Dier maakt een geluid.") End Sub End Class ' Afgeleide klasse Dog herschrijft Speak Public Class Dog Inherits Animal Public Overrides Sub Speak() Console.WriteLine("Hond blaft.") End Sub End Class Sub Main() Dim a As Animal = New Dog() a.Speak() ' Zal opleveren: Hond blaft. End Sub

Vragende val

V: Kun je in Visual Basic .NET methoden herschrijven die niet als Overridable/Abstract in de basis klasse zijn gedeclareerd?

A: Nee. Alleen methoden gemarkeerd als Overridable of gedeclareerd met een interface/abstractie kunnen worden herschreven bij overerving. Pogingen om Overrides te gebruiken voor een gewone methode zal een compilatiefout veroorzaken.

' Fout: Public Class A Public Sub Foo() End Sub End Class Public Class B Inherits A Public Overrides Sub Foo() ' Compilatiefout End Sub End Class

Verhaal

1. In een echt project, gerelateerd aan microservices-architectuur, verklaarde een nieuw teamlid een virtuele methode als een gewone (zonder Overridable) in de basis klasse-controller. Later probeerde een andere ontwikkelaar deze methode te herschrijven voor speciale verwerking. Dit resulteerde in duplicatie van logica en bugs, aangezien de ouderlijke implementatie altijd werd aangeroepen, ondanks de aanwezigheid van de methode in de afgeleide klasse.


Verhaal

2. Onvoldoende architecturale planning en het ontbreken van polymorfisme leidde tot honderden regels overbodige code: wanneer er een nieuwe afgeleide klasse moest worden toegevoegd, moest een groot deel van de basis klasse methode worden herschreven in plaats van eenvoudigweg de benodigde Override te implementeren. Dit maakte onderhoud en support moeilijker.


Verhaal

3. Geval uit een bedrijfsapplicatie: tijdens de migratie naar .NET Core markeerde een ontwikkelaar de methode als Overridable, maar vergat per ongeluk de Implements interface toe te voegen. Dit resulteerde in ambiguïteit in de methode resolutie binnen de overervingshiërarchie en leidde tot problemen bij het aanroepen via een interface-referentie, wat resulteerde in niet-werkende functionaliteit.