Moștenire (ghid de programare c #)

Moștenirea, împreună cu încapsularea și polimorfismul, este una dintre cele trei caracteristici principale (sau concepte de bază) ale programării orientate pe obiecte. Moștenirea vă permite să creați noi clase care reutilizează, extind și modifică comportamentul definit în alte clase. O clasă a cărei membri sunt moștenite se numește o clasă de bază. iar clasa care le moștenește pe acești membri se numește clasa derivată. O clasă derivată poate avea doar o singură clasă de bază imediată. Totuși, moștenirea este tranzitivă. Dacă ClassC este derivat din ClassB, iar ClassB derivă din ClassA, ClassC moștenește membrii declarați în ClassB și ClassA.







Structurile nu acceptă moștenirea, dar pot implementa interfețe. Pentru mai multe informații, consultați secțiunea Interfețe (C # Programming Guide).

Conceptual, clasa derivată este o specializare a clasei de bază. De exemplu, dacă aveți o clasă de bază pentru animale. Este posibil să existe o clasă derivată numită Mammal. și o altă clasă derivată, numită Reptile. Mamalul este animal și reptilele sunt animale. dar fiecare clasă derivată reprezintă specializări diferite ale clasei de bază.

Când definiți o clasă care să moștenească dintr-o altă clasă, clasa derivată primește în mod explicit toți membrii clasei de bază, cu excepția constructorilor și a distrugătorilor. O clasă derivată poate astfel să reutilizeze codul în clasa de bază fără a fi nevoie să o reimplementați. Într-o clasă derivată, puteți adăuga mai mulți membri. Astfel, clasa derivată extinde funcționalitatea clasei de bază.

Următoarea ilustrează clasa WorkItem. reprezentând elementul de lucru în procesul de afaceri. Ca toate clasele, este derivat din Object și moștenește toate metodele sale. Există cinci membri în WorkItem. Aceasta include constructorul, deoarece constructorii nu sunt moșteniți. Clasa ChangeRequest este moștenită de la WorkItem și reprezintă un anumit tip de element de lucru. ChangeRequest adaugă încă doi membri membrilor moșteniți de la WorkItem și Object. Trebuie să-și adauge propriul constructor și, de asemenea, adaugă originalIIDID. Proprietatea originalItemID vă permite să asociați instanța ChangeRequest cu obiectul original WorkItem. la care a fost aplicată solicitarea de modificare.







Moștenire (ghid de programare c #)

Figura următoare arată cum relațiile dintre clasele din exemplul anterior sunt exprimate în C #. Exemplul următor arată, de asemenea, modul în care WorkItem înlocuiește metoda virtuală Object.ToString. și modul în care clasa ChangeRequest moștenește implementarea metodei WorkItem.

Atunci când clasa de bază declară metoda ca fiind virtuală. O clasă derivată poate suprascrie o metodă cu implementarea proprie. Dacă clasa de bază declară un membru ca abstract. atunci această metodă trebuie redefinită în orice clasă non-abstractă care moșteneste direct din această clasă. Dacă clasa derivată este ea însăși abstractă, atunci ea moștenește termeni abstracți fără să le realizeze. Termenii abstracti și virtuali reprezintă baza polimorfismului, care este a doua caracteristică principală a programării orientate pe obiecte. Pentru mai multe informații, consultați Polymorphism (C # Programming Guide).

Puteți declara o clasă ca fiind abstractă. dacă doriți să împiedicați crearea directă a instanțelor cu noul cuvânt cheie. Cu această abordare, o clasă poate fi utilizată numai dacă noua clasă este derivată din ea. O clasă abstractă poate conține una sau mai multe semnături de metodă care sunt declarate a fi abstracte. Aceste semnături specifică parametrii și returnează o valoare, dar nu au nicio implementare (corpul metodei). O clasă abstractă nu trebuie să conțină membri abstracte; Cu toate acestea, dacă clasa mai conține un termen abstract, atunci clasa însăși trebuie declarată ca abstractă. Clasele derivate care nu sunt ele însele abstracte ar trebui să ofere o implementare pentru orice metodă abstractă dintr-o clasă de bază abstractă. Pentru mai multe informații, consultați clasele abstracte și închise și membrii clasei (C # Ghid de programare).

Interfața este un tip de referință, în ceva similar cu o clasă de bază abstractă, care constă numai din membri abstracți. Atunci când o clasă implementează o interfață, trebuie să furnizeze o implementare pentru toți membrii interfeței. Mai multe interfețe pot fi implementate într-o clasă, deși pot fi derivate numai dintr-o singură clasă de bază directă.

Interfețele sunt folosite pentru a defini anumite capabilități pentru clase care nu au neapărat o relație de identitate. De exemplu, interfața IEquatable poate fi implementată de orice clasă sau structură care include codul clientului pentru a determina echivalența obiectelor de tip 2 (cu toate acestea, tipul definește echivalența). IEquatable nu implică același tip de relație de identitate care există între clasele de bază și cele derivate (de exemplu, Mammal este Animal). Pentru mai multe informații, consultați secțiunea Interfețe (C # Programming Guide).

Din clasa derivată, puteți avea acces la membrii interni, protejați, interni și protejați ai clasei de bază. Deși clasa derivată moștenește membrii privați ai clasei de bază, nu poate accesa acești membri. Cu toate acestea, toți acești membri privați sunt încă prezenți în clasa derivată și pot face același lucru ca și în clasa de bază în sine. De exemplu, să presupunem că o metodă de clasă de bază protejată are acces la un câmp privat. Acest câmp trebuie să fie prezent în clasa derivată pentru funcționarea corectă a metodei de bază moștenite.







Articole similare

Trimiteți-le prietenilor: