Diferențele suprascrie o metodă de suprapunere - stiva de preaplin în limba rusă

Suprapunerea (în termenii) înseamnă că metoda din clasa derivată ascunde metoda cu aceeași semnătură în clasa de bază.

Prin urmare, în C #, se recomandă metodele claselor derivate care suprascriu metodele clasei de bază, utilizează cuvântul cheie nou. Dacă uitați să faceți acest lucru, compilatorul vă va avertiza că vă ascundeți aceeași funcție cu aceeași semnătură în clasa de bază.

În acest caz, pentru a se referi la baza clasei de bază va fi întotdeauna numit Hello metoda clasă de bază și să se refere la clasa derivată va fi numită metoda Bună clasei derivate.

Suprascriere se aplică funcțiilor virtuale. În clasa derivată funcția virtuală este înlocuită. Pentru a face acest lucru, în funcție de clasa de bază trebuie să fie definită cu virtual (sau abstract), iar în clasa derivată pentru a trece peste este necesar să specificați un cuvânt cheie suprascrie diferit.

Adică, diferența este în aceste două propoziții. În primul caz, suprapunerea

iar în al doilea caz, atunci când avem imperative

Aceasta este, în primul caz, avem în fiecare nouă clasă derivată din ierarhia de clasă pentru a anunța o nouă funcție care ascunde funcția cu aceeași semnătură în clasa de bază. În al doilea caz, funcția de același nume nu este re-declarată și redefinit deja declarate în funcție de clasa de bază.

Acest lucru vă permite să invoce în mod dinamic definirea corectă a aceleași funcții, în funcție de obiectul la care funcția este numit.

Supracomanda metodă clasă de bază virtuală - o metodă de creare a unei clase generate având exact aceeași semnătură (și marcate cuvinte cheie speciale). În această metodă pentru legarea virtuală + redefinire lui acționează legarii: apel metoda prin referire la clasa de bază poate avea ca rezultat un apel la o metodă supraîncărcat.

Înlocuirile metode non-virtuale nu există.

Metoda Suprapunerea - este pur și simplu într-o definiție de clasă sau derivată din metoda lui cu același nume (și semnătura, eventual diferită). În acest caz, care dintre cele două metode vor fi numite, este cunoscut la momentul compilarii.

Răspuns 9 '16 ianuarie, la 18:03

Vladd
148k # 9679; 15 # 9679; 158 # 9679; 327

Suprapunere în cauză, așa cum am înțeles - acest nume shadowing. și nu supraîncărcați (superior). Deoarece C # nu știu, dar în opinia mea, pentru a determina clasa de două metode cu același nume și semnătura imposibilă. - Pavel Parshin 09 ianuarie '16 la 18:13