Overschrijvingen in VB.NET

Dit is een van een minireeks die de verschillen in overbelastingen, schaduwen en overschrijvingen in VB.NET behandelt. Dit artikel behandelt overschrijvingen. De artikelen over de anderen zijn hier:

-> Overbelastingen
-> Schaduwen

Deze technieken kunnen enorm verwarrend zijn; er zijn veel combinaties van deze zoekwoorden en de onderliggende overervingsopties. De eigen documentatie van Microsoft begint het onderwerp niet recht te doen en er is veel slechte of verouderde informatie op internet. Het beste advies om er zeker van te zijn dat uw programma correct is gecodeerd, is: "Test, test en test opnieuw." In deze serie zullen we ze een voor een bekijken met nadruk op de verschillen.

Overschrijvingen

Wat Shadows, Overloads en Overrides allemaal gemeen hebben, is dat ze de naam van elementen hergebruiken terwijl ze veranderen wat er gebeurt. Schaduwen en overbelastingen kunnen zowel binnen dezelfde klasse werken als wanneer een klasse een andere klasse overneemt. Overschrijvingen kunnen echter alleen worden gebruikt in een afgeleide klasse (soms een onderliggende klasse genoemd) die erft van een basisklasse (soms een bovenliggende klasse genoemd). En Overrides is de hamer; hiermee kunt u een methode (of een eigenschap) uit een basisklasse volledig vervangen.

In het artikel over klassen en het trefwoord Schaduwen (zie: Schaduwen in VB.NET) is een functie toegevoegd om aan te geven dat naar een overgenomen procedure kan worden verwezen.

 Public Class ProfessionalContact '... code niet weergegeven ... Public Function HashTheName (ByVal nm As String) As String Return nm.GetHashCode End Function End Class 

De code die een hiervan afgeleide klasse instantieert (CodedProfessionalContact in het voorbeeld) kan deze methode aanroepen omdat deze is geërfd.

In het voorbeeld gebruikte ik de VB.NET GetHashCode-methode om de code eenvoudig te houden en dit leverde een redelijk nutteloos resultaat op, de waarde -520086483. Stel dat ik in plaats daarvan een ander resultaat wilde, maar,

-> Ik kan de basisklasse niet wijzigen. (Misschien heb ik alleen gecompileerde code van een verkoper.)

... en ...

-> Ik kan de belcode niet wijzigen (misschien zijn er duizend exemplaren en ik kan ze niet bijwerken.)

Als ik de afgeleide klasse kan bijwerken, kan ik het geretourneerde resultaat wijzigen. (De code kan bijvoorbeeld onderdeel zijn van een bij te werken DLL.)

Er is een probleem. Omdat het zo uitgebreid en krachtig is, moet je toestemming van de basisklasse hebben om Overrides te gebruiken. Maar goed ontworpen codebibliotheken bieden het. (Uw codebibliotheken zijn allemaal goed ontworpen, toch?) De door Microsoft geleverde functie die we zojuist hebben gebruikt, is bijvoorbeeld overschrijfbaar. Hier is een voorbeeld van de syntaxis.

Openbare overschrijfbare functie GetHashCode als geheel getal

Dus dat trefwoord moet ook aanwezig zijn in onze voorbeeldbasisklasse.

 Openbare overschrijfbare functie HashTheName (ByVal nm As String) As String