Detta är en av en miniserie som täcker skillnaderna i överbelastning, skuggor och åsidosättningar i VB.NET. Den här artikeln täcker åsidosättningar. Artiklarna som täcker de andra finns här:
-> Överbelastning
-> Skuggor
Dessa tekniker kan vara väldigt förvirrande; det finns många kombinationer av dessa sökord och de underliggande arvalternativen. Microsofts egen dokumentation börjar inte göra ämnet rättvisa och det finns mycket dålig information eller föråldrad information på webben. Det bästa rådet för att vara säker på att ditt program är korrekt kodat är "Testa, testa och testa igen." I den här serien tittar vi på dem en åt gången med tonvikt på skillnaderna.
Det som alla skuggor, överbelastningar och åsidosättningar har gemensamt är att de återanvänder elementens namn medan de ändrar vad som händer. Skuggor och överbelastningar kan fungera båda inom samma klass eller när en klass ärver en annan klass. Åsidosättningar kan emellertid endast användas i en härledd klass (ibland kallad en barnklass) som ärver från en basklass (ibland kallad en överordnad klass). Och åsidosättningar är hammaren; det låter dig helt ersätta en metod (eller en egenskap) från en basklass.
I artikeln om klasser och nyckelordet Shadows (se: Shadows in VB.NET), lades en funktion till för att visa att det kan hänvisas till en ärvd procedur.
Public Class ProfessionalContact '... kod visas inte ... Public Function HashTheName (ByVal nm As String) Som String Return nm.GetHashCode Slutfunktion End Class
Koden som instanserar en klass härrörande från den här (CodedProfessionalContact i exemplet) kan kalla den här metoden eftersom den ärvs.
I exemplet använde jag metoden VB.NET GetHashCode för att hålla koden enkel och detta gav ett ganska värdelöst resultat, värdet -520086483. Anta att jag ville ha ett annat resultat tillbaka istället men,
-> Jag kan inte ändra basklassen. (Kanske allt jag har är en kod från en leverantör.)
... och ...
-> Jag kan inte ändra samtalskoden (det kanske finns tusen exemplar och jag kan inte uppdatera dem.)
Om jag kan uppdatera den härledda klassen kan jag ändra det returnerade resultatet. (Till exempel kan koden vara en del av en uppdaterbar DLL.)
Det finns ett problem. Eftersom det är så omfattande och kraftfullt, måste du ha tillstånd från basklassen att använda Överrides. Men väldesignade kodbibliotek tillhandahåller det. (Din kodbibliotek är alla väl utformade, eller hur?) Till exempel är den tillhandahållna Microsoft-funktionen vi just använde överbrytbar. Här är ett exempel på syntaxen.
Offentlig överbrytbar funktion GetHashCode som heltal
Så det nyckelordet måste också finnas i vårt exempel basklass.
Offentlig överbrytbar funktion HashTheName (ByVal nm As String) Som String