C # --- Un ghid pentru C # --- Covariance și contravariance în generalizări
În versiunea C # 4.0, capacitățile de covarianță și contravariență au fost extinse la parametrii de tip generic utilizați în interfețele generalizate și delegați. Covariance și contravariance sunt utilizate în principal pentru a rezolva rațional situațiile speciale care rezultă din utilizarea interfețelor generice și a delegațiilor definite în .NET Framework. Astfel, unele interfețe și delegații definite în bibliotecă au fost actualizate pentru a folosi covarianța și contravariența parametrilor de tip. Desigur, avantajele covarianței și contravarierii pot fi de asemenea folosite în interfețe și delegații create de forțe proprii.
Aplicarea covarianței în interfața generalizată
În ceea ce privește interfața generalizată, covarianța servește ca mijloc de a permite metodei să returneze un tip derivat din clasa specificată în parametrul de tip. În trecut, tipul de retur trebuie să se potrivească exact cu parametrul tip din cauza verificării stricte a generalizărilor pentru potrivirile de tip. Covariance atenuează această regulă strictă în așa fel încât să asigure siguranță tipică. Parametrul de tip covariante este declarat utilizând cuvântul cheie "out". care precede numele acestui parametru.
Pentru a înțelege consecințele aplicării covarianței, ne îndreptăm spre un exemplu concret. Mai jos este o interfață foarte simplă IMyInfo, care folosește covarianța:
Acordați o atenție deosebită modului în care este declarat parametrul tipului generalizat T. Numele acestuia este precedat de cuvântul cheie extins. În acest context, cuvântul cheie extern indică faptul că tipul generic T este covarianțial. Și din moment ce este covarianta, metoda GetObject () poate returna o referință la un tip generic T sau o referință la orice clasă derivată de la tipul T.
Aplicarea contravarierii în interfața generalizată
În ceea ce privește interfața generalizată, contravarianța servește ca mijloc de a permite unei metode să utilizeze un argument al cărui tip se referă la clasa de bază specificată în parametrul de tip corespunzător. În trecut, tipul argumentului metodei ar fi trebuit să fie exact același cu parametrul de tip din cauza verificării stricte a generalizărilor pentru potrivirea tipului. Contravariatul atenuează această regulă strictă în așa fel încât să ofere siguranță tipică. Parametrul tip contravariant este declarat utilizând cuvântul cheie din. care precede numele acestui parametru.
După cum puteți vedea, tipul generic T este indicat în această interfață ca fiind contravariant cu cuvântul cheie din, care precede numele parametrului său. Rețineți, de asemenea, că T este un parametru de tip pentru argumentul obj în metoda Show ().
Contravarianța se dovedește a fi potrivită numai pentru tipurile de referință, iar parametrul de tip contravariant poate fi aplicat numai argumentelor metodelor. Prin urmare, cuvântul cheie nu poate fi specificat în parametrul tip utilizat ca tip de returnare.
Utilizarea covarianței și contravarierii interfețelor este ilustrată de următorul exemplu: