Sunt momente când avem funcții sau metode care realizează practic același lucru, dar folosesc diferite tipuri de parametri. Cu alte cuvinte, există cazuri când avem metode cu același nume, dar cu semnături diferite. Ce înseamnă asta? Înseamnă că putem avea câteva metode cu același nume, dar cu alt tip de parametri, aranjament diferit de parametri, sau un număr diferit de parametri. Numim aceaste variații suprasarcini sau supraîncărcări ale metodei/funcției (overloading).
De exemplu, să presupunem că vrem să avem niște funcții care să afișeze la consolă diferite tipuri: șiruri de caractere, numere întregi, float, orice. Putem face astfel:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
static void Main(string[] args) { AfiseazaString("Buna!"); AfiseazaInt(1); AfiseazaDecimal(3.1m); Console.Read(); } static void AfiseazaString(string parametruString) { //afiseaza string } static void AfiseazaInt(int parametruInt) { //afiseaza int } static void AfiseazaDecimal(decimal parametruDecimal) { //afiseaza decimal } |
Codul de mai sus funcționează perfect, nici un dubiu. Cu toate acestea, folosind supraîncărcarea metodelor, putem realiza același lucru astfel:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
static void Main(string[] args) { Afiseaza("hello"); Afiseaza(1); Afiseaza(3.1m); Console.Read(); } static void Afiseaza(string parametruString) { //afiseaza string } static void Afiseaza(int parametruInt) { //afiseaza int } static void Afiseaza(decimal parametruDecimal) { //afiseaza decimal } |
Puteți observa că avem trei metode cu același nume, Afiseaza(). Cum este posibil? Nu ar trebui să se plângă compilatorul că existentă deja o metodă cu același nume? Ei bine, nu, nu în acest caz, deoarece semnăturile metodelor noastre sunt diferite, adică avem diferite tipuri de parametri declarați în fiecare metodă.
Când numim metoda noastră Afiseaza() cu diferiți parametri – int, string, etc, compilatorul detectează automat tipul utilizat ca parametru în apel, și selectează supraîncarcarea corespunzătoare a metodei noastre.
Imaginea următoare prezintă supraîncărcarea a 8-a a metodei WriteLine(), ce scrie un număr întreg la consolă. Metoda WriteLine() are 19 suprasarcini (în engleză, overloads).
Conceptele explicate în această lecție sunt prezentate și vizual, ca parte a următorului videoclip:
Tags: funcții, metode, parametri functii, parametri metode, supraîncarcare