Aceasta este una dintre mini-serii care acoperă diferențele de suprasarcini, umbre și înlocuirile din VB.NET. Acest articol include Anulări. Articolele care acoperă celelalte sunt aici:
-> Suprasarcini
-> Umbre
Aceste tehnici pot fi extrem de confuze; există o mulțime de combinații ale acestor cuvinte cheie și opțiunile de moștenire de bază. Documentația Microsoft nu începe să facă justiția subiectului și există o mulțime de informații proaste sau depășite pe web. Cel mai bun sfat pentru a vă asigura că programul dvs. este codat corect este „Testare, testare și testare din nou”. În această serie, le vom privi pe rând, cu accent pe diferențe.
Lucrul pe care Shadows, Overloads și Overrides îl au în comun este acela că refolosesc numele elementelor în timp ce schimbă ceea ce se întâmplă. Umbrele și supraîncărcările pot opera ambele în cadrul aceleiași clase sau atunci când o clasă moștenește o altă clasă. Însă, suprasolicitările pot fi utilizate doar într-o clasă derivată (uneori numită clasă copil), care se moștenește de la o clasă de bază (uneori numită clasă părinte). Și Anulează este ciocanul; vă permite să înlocuiți în totalitate o metodă (sau o proprietate) dintr-o clasă de bază.
În articolul despre clase și cuvântul cheie Shadows (a se vedea: Shadows in VB.NET), a fost adăugată o funcție care arată că o procedură moștenită poate fi făcută referință.
Public Class ProfessionalContact '... codul nu este afișat ... Funcția publică HashTheName (ByVal nm As String) As String Return nm.GetHashCode Funcția End Class End
Codul care inițiază o clasă derivată din aceasta (CodedProfessionalContact în exemplu) poate apela această metodă, deoarece este moștenită.
În exemplu, am folosit metoda GetBashCode VB.NET pentru a menține codul simplu, iar acest lucru a returnat un rezultat destul de inutil, valoarea -520086483. Să presupunem că am vrut un rezultat diferit, în schimb, dar,
-> Nu pot schimba clasa de bază. (Poate tot ce am eu este un cod compilat de la un furnizor.)
… și…
-> Nu pot schimba codul de apelare (poate sunt o mie de copii și nu le pot actualiza.)
Dacă pot actualiza clasa derivată, atunci pot schimba rezultatul returnat. (De exemplu, codul ar putea face parte dintr-un DLL actualizabil.)
Există o problemă. Deoarece este atât de cuprinzător și puternic, trebuie să ai permisiunea clasei de bază pentru a utiliza Anulări. Dar bibliotecile de cod bine concepute îl asigură. (Ta bibliotecile de coduri sunt toate bine proiectate, nu?) De exemplu, funcția oferită de Microsoft pe care tocmai am folosit-o este suprasemnabilă. Iată un exemplu de sintaxă.
Funcție publică suprasolicitată GetHashCode ca număr întreg
Deci, acest cuvânt cheie trebuie să fie prezent și în clasa noastră de bază de exemplu.
Funcție publică suprasemnabilă HashTheName (ByVal nm As String) ca șir