Prin introducerea metodelor extensie (extension methods) in limbajul C#, Microsoft ofera posibilitatea extinderii unei clase cu metode aditionale. Prin "extindere" nu ma refer la o suprascriere a unei clase in sensul mostenirii. Asta nu inseamna insa ca acele extensii vor fi parte a clasei tinta, ci doar ca acele extensii pot fi apelata ca si cum ar fi membre ale clasei pe care o extind.
Metodele extensie sunt statice si sunt definite in clase statice. Aceste metode au cel putin un argument de tipul clasei pe care urmeaza sa o extinda. Acest argument este identificat de cuvantul cheie this. Mai jos am definit o astfel de metoda extensie, WordCount, care extinde clasa System.String si numara cuvintele dintr-un string (exemplul este din MSDN).
Metoda extensie tocmai definita poate fi apelata ca si cum ar fi parte a clasei System.String, astfel:
Metodele extensie sunt foarte utile atunci cand aveam de-a face cu clase sealed, care nu pot fi mostenite (ex: clasa System.String), ele asigurand o modalitate de a extinde aceste clase.
Deasemenea, LINQ se bazeaza pe metode extensie, operatorii sai extinzand clasele IEnumerable si IEnumerable<T>, facand posibil urmatoarea secventa de cod, care sorteaza un sir de intregi:
OBSERVATIE: O metoda extensie care suprascrie o metoda a clasei tinta, nu va fi apelata niciodata, intotdeauna fiind apelata metoda clasei tinta.
Niciun comentariu:
Trimiteți un comentariu