Saturday, September 26, 2020 18:25

Cuprins >> Funcții > Semnătura metodelor și funcțiilor

Semnătura metodelor și funcțiilor

Am vorbit în lecția precedentă despre semnătura metodelor și funcțiilor, și am oferit acolo o scurtă explicație cu privire la acest subiect. Este timpul să explic acest nou concept un pic mai detaliat. La nivel de bază, doar două lucruri sunt obligatorii pentru a specifica semnătura unei metode sau funcții: tipul de parametri și ordinea în care sunt enumerați.

Rețineți că numele parametrilor NU sunt importante pentru declarația metodei sau funcției. Aceasta înseamnă că:

Motivul pentru care exemplul de mai sus nu va funcționa este deoarece, chiar dacă am numit parametrii metodei noastre în mod diferit, tipul și ordinea lor este de fapt aceeași, așa că am putea spune că cele două metode ExecutaActiune() au semnături identice. Ambele declară parametrii de tip int și float, în aceeași ordine. Acesta este motivul pentru care compilatorul va afișa următoarea eroare: Tipul ‘nume_clasa’ definește deja un membru numit ‘ExecutaActiune’ cu aceleași tipuri de parametri. (Type ‘nume_clasa’ already defines a member called ‘ExecutaActiune’ with the same parameter types.)

Ar fi de ajuns să schimbăm pur și simplu poziția unuia dintre parametrii sau să schimbăm tipul lui, pentru ca eroarea să dispară. În acest caz, am crea o supraîncărcare a metodei noastre.

Deci, în exemplul următor, toate declarațiile vor funcționa, pentru că semnăturile lor sunt diferite:

Acest lucru funcționează pentru metode, dar este posibil ca tipul returnat al unei funcții să schimbe ceva? Sa vedem:

Prin urmare, avem două funcții, cu parametri identici (atât ca tip, cât și ca poziție), dar cu tipuri diferite de returnare – prima returnează un int, în timp ce a doua returnează un long. Este acest lucru suficient pentru a crea o semnătură?

Din pacate, nu. Chiar dacă funcțiile întorc tipuri de date diferite, ele așteaptă același tip de parametri, ceea ce înseamnă că atunci când le vom apela, compilatorul pur și simplu nu va ști care dintre funcții încercăm să apelăm, și, prin urmare, va afișa o eroare: apelul este ambiguu între următoarele metode sau proprietăți: ‘Suma(int)’ si ‘Suma(int)’ (The call is ambiguous between the following methods or properties: ‘Suma(int, int)’ and ‘Suma(int, int)).

Comments

comments

Tags: , , , , ,

Leave a Reply



Do NOT follow this link or you will be banned from the site!