Metode: concepte de bază. Metode de supraîncărcare.
Metode: concepte de bază
O metodă este un element funcțional al unei clase care implementează calculele sau alte acțiuni efectuate de o clasă sau de instanța acesteia (obiect). Metoda este o piesă completă de cod care poate fi accesată prin nume. Este descris o singură dată, dar poate fi numit de mai multe ori. Setul de metode din clasă determină ce poate face clasa. De exemplu, clasa Math standard conține metode care vă permit să calculați valorile funcțiilor matematice.
- Atributele și specificatorii sunt elemente opționale ale sintaxei descrierii metodei. În această etapă, nu vom folosi atribute, iar din toate calificările vom folosi cu siguranță calificativul static. care vă permite să accesați metoda din clasă fără a crea instanța acesteia.
Notă: Restul specificatoarelor sunt acoperite în secțiunea "clase".
Luați în considerare cel mai simplu exemplu al metodei:
În acest exemplu, nu sunt transmise metode Func, astfel încât lista de parametri este goală. În plus, metoda nu returnează nimic, deci tipul returnării este nevalid. În metoda principală, am denumit metoda Func de două ori. Dacă este necesar, această metodă poate fi apelată de câte ori este necesar pentru a rezolva problema.
Alocări.- Adăugați a treia metodă de apel Func la metoda principală.
- Conversia programului astfel încât metoda Func să fie numită n ori.
Să schimbați exemplul original astfel încât valoarea lui x să fie trecută la el. și metoda returnată y.
În acest exemplu, metoda Func conține parametrul x. al cărui tip este dublu. Pentru ca metoda Func să returneze valoarea expresiei 1 / x (a cărei tip este dublă) față de metoda principală de apelare, tipul valorii returnate este dublu înainte de numele metodei. iar metoda de returnare este utilizată în corpul metodei. Instrucțiunea de returnare termină metoda și transmite controlul până la punctul de apel.
Alocări. Conversia programului astfel încât metoda Func returnează valoarea expresiei:- x 2;
Să luăm în considerare un alt exemplu:
În acest exemplu, metoda Func are doi parametri întregi - x. y. și ca rezultat, metoda returnează cea mai mare dintre ele. În etapa descrierii metodei (linia 1) sunt specificați parametrii formali, în stadiul apelului (linia 2) parametrii reali sunt transferați la metodă, care prin număr și tip coincid cu parametrii formali. Dacă numărul de parametri reali și formați este diferit, compilatorul va emite un mesaj de eroare corespunzător. Dacă parametrii sunt tipuri diferite, compilatorul va încerca să efectueze o conversie de tip implicit. Dacă nu este posibilă o conversie implicită, va fi generată o eroare.
Rețineți că atunci când ați apelat metoda Func, ați folosit cuibarea unui apel la altul.
Sarcină. Conversia programului astfel încât folosind metoda Func puteți găsi cea mai mare valoare a patru numere: a, b, c, d. Metoda Func nu se modifică.
În general, parametrii sunt utilizați pentru a face schimb de informații între metodele de apel și cele chemate. În C #, există patru tipuri de parametri pentru schimb: parametrii-valori, parametrii de referință, parametrii de ieșire, parametrii matricei.
Când treceți un parametru prin valoare, metoda primește copii ale parametrilor, iar operatorii metodei funcționează cu aceste copii. Metoda nu are acces la valorile inițiale ale parametrilor și, prin urmare, nu există nici o posibilitate de a le schimba.
Notă. Toate exemplele considerate anterior au utilizat transferul de date prin valoare.
Luați în considerare un exemplu mic:
În acest exemplu, în metoda Func, parametrul formal y și parametrul actual b corespunzător metodei principale au fost marcate cu specificatorul de ieșire. Prin urmare, valoarea b înainte de apelul metodei Func nu a putut fi determinată, dar modificarea parametrului y reflectă modificarea valorii parametrului b.
Notă. Parametrii array vor fi discutate mai târziu.
Metode de supraîncărcare
Uneori este convenabil ca metodele care implementează același algoritm pentru diferite tipuri de date să aibă același nume. Utilizarea mai multor metode cu același nume, dar diferite tipuri și numere de parametri se numește metode de supraîncărcare. Compilatorul determină ce metodă să invocăm, după tipul și numărul de parametri reali.
Luați în considerare următorul exemplu:
Atunci când se numește metoda max, compilatorul selectează o opțiune corespunzătoare tipului și numărului de argumente transmise metodei. Dacă nu se găsește o potrivire exactă, conversiile de tip implicit sunt efectuate în conformitate cu regulile generale. Dacă conversia nu este posibilă, este afișat un mesaj de eroare. Dacă alegerea unei metode supraîncărcate este posibilă în mai multe moduri, atunci este aleasă opțiunea "best" (o opțiune care conține un număr mai mic și o lungime de transformări în conformitate cu regulile de conversie de tip). Dacă există mai multe opțiuni din care nu puteți selecta cel mai bun, este afișat un mesaj de eroare.
Metodele de supraîncărcare reprezintă o manifestare a polimorfismului. una dintre proprietățile de bază ale OOP. Este mult mai ușor pentru un programator să-și amintească un nume de metodă și să îl folosească pentru a lucra cu diferite tipuri de date și să decidă ce versiune a metodei să invocieze pe compilator. Acest principiu este folosit pe scară largă în clasele .NET ale bibliotecii. De exemplu, în clasa Consola standard, metoda WriteLine este suprasolicitată de 19 ori la valorile de ieșire de diferite tipuri.