Manual c #, metode de supraîncărcare

În C #, puteți partaja același nume cu două sau mai multe metode din aceeași clasă, cu condiția ca parametrii săi să fie declarați diferit. În acest caz, ei spun că metodele sunt supraîncărcate, iar procesul în sine se numește metode de supraîncărcare. Metodele de suprasarcină se referă la una dintre modalitățile de implementare a polimorfismului în C #.







În general, pentru a supraîncărca metoda, este suficient să se declare diferitele sale variante, iar restul va fi preluat de compilator. Dar este necesar să se respecte următoarea condiție importantă: tipul sau numărul de parametri pentru fiecare metodă trebuie să fie diferit.

Nu este suficient ca cele două metode să difere numai în ceea ce privește tipurile de valori returnate. De asemenea, acestea ar trebui să difere în funcție de tipurile sau numărul parametrilor acestora. (În orice caz, tipul de retur nu oferă suficiente informații compilatorului C # pentru a decide ce metodă să utilizeze.) Desigur, metodele supraîncărcate pot diferi și în tipurile de valori returnate. Când se invocă o metodă supraîncărcată, se execută varianta a cărei parametri corespund (după tip și număr) cu argumentele transmise.

Să examinăm un exemplu de utilizare a metodelor de supraîncărcare:

După cum puteți vedea, metoda ui este repornit de trei ori. Modificatorii pentru parametrii ref și out sunt de asemenea luați în considerare atunci când se ia o decizie de supraîncărcare a metodei. Deși se iau în considerare modificatorii parametrilor ref și out, atunci când se ia decizia de supraîncărcare a metodei, diferența dintre ele nu este atât de semnificativă. Să adăugăm încă o suprasarcină exemplului de mai sus:

Supraîncărcarea metodelor sprijină proprietatea polimorfismului, deoarece în acest fel în C # principiul principal al polimorfismului este realizat: o interfață - multe metode. Pentru a deveni mai clară cum se face acest lucru, să ne îndreptăm spre un exemplu concret. În limbile de programare care nu acceptă suprasolicitarea metodei, fiecare metodă trebuie să aibă un nume unic. Dar, în programare, este adesea nevoie să se implementeze în mod esențial aceeași metodă pentru prelucrarea diferitelor tipuri de date.







Să presupunem că avem nevoie de o funcție care determină valoarea absolută. În limbile care nu acceptă suprasolicitarea metodelor, este de obicei necesar să se creeze trei sau mai multe variante ale unei astfel de funcții cu nume ușor diferite, dar totuși diferite. De exemplu, în C, funcția abs () returnează valoarea absolută a unui întreg, laboratoarele () reprezintă valoarea absolută a unui întreg lung, iar funcția fabs () este valoarea absolută a unui număr de punct floating cu o singură precizie.

În C, supraîncărcarea nu este suportată și, prin urmare, fiecare funcție trebuie să aibă propriul nume, chiar dacă toate funcțiile de mai sus fac în mod esențial același lucru - defini valoarea absolută. Dar acest lucru complică fundamental situația, deoarece trebuie să vă amintiți numele tuturor celor trei funcții, deși acestea sunt implementate pe același principiu de bază. Probleme similare în C # nu apar, deoarece fiecare metodă care definește o valoare absolută poate fi atribuită aceluiași nume. Într-adevăr, biblioteca de clasă pentru .NET Framework include metoda Abs (), care este supraîncărcată în clasa System.Math pentru prelucrarea datelor de diferite tipuri numerice. Compilaterul C # determină ce versiune a metodei Abs () ar trebui să fie apelată, pe baza tipului de argument transmis.

C # definește conceptul de semnătură. numele metodei și o listă a parametrilor săi; În ceea ce privește supraîncărcarea, acest concept înseamnă că într-o clasă nu ar trebui să existe două metode cu aceeași semnătură. Trebuie subliniat că semnătura nu include tipul valorii returnate, deoarece nu este luată în considerare atunci când compilatorul C # ia o decizie cu privire la supraîncărcarea metodei. Modificatorul de paramuri nu este inclus în semnătura.

Pentru a consolida conceptul metodelor de supraîncărcare, să analizăm supraîncărcarea metodei IndexOf încorporate a clasei String din spațiul de nume al sistemului:

Manual c #, metode de supraîncărcare

În acest exemplu, doar o parte din supraîncărcarea disponibilă a metodei IndexOf este folosită, dacă C # nu suportă supraîncărcarea, atunci ar trebui să dăm fiecărei metode numele său, ceea ce, desigur, este foarte incomod. În acest caz, metoda IndexOf implementează mai multe supraîncărcări, pentru a găsi caracterele și substring-urile din șirul sursă.







Articole similare

Trimiteți-le prietenilor: