Moștenirea (Ghid de programare C #), documente Microsoft

În acest articol,

Moștenire, împreună cu încapsulare și polimorfism este una dintre cele trei caracteristici majore ale programării orientate pe obiecte. Moștenirea vă permite să creați noi clase care reutilizat, de a extinde și modifica comportamentul definit într-o altă clasă. Clasa ai cărei membri sunt moștenite se numește clasa de bază. o clasă care moștenește acei membri se numește clasă derivată. Clasa derivată poate avea doar o singură clasă de bază directă. Cu toate acestea, moștenirea este tranzitiv. În cazul în care clasa ClassC derivă din ClassB, și ClassB este derivat din ClassA, ClassC moștenește membrii declarate în ClassB și ClassA.

remarcă

Structurile nu suportă moștenire, dar se poate pune în aplicare interfețe. Pentru mai multe informații, consultați. Sub Interfețe.

Clasa de Conceptual derivată este o specializare a clasei de bază. De exemplu, cu clasă de bază pentru animale, poate exista o clasă derivată numită Mamiferelor. și unul dintr-o clasă derivată numită reptilelor. Mamiferul este un animal și Reptile este un animal. dar fiecare clasă derivată este specializări diferite ale clasei de bază.

La determinarea clasei să moștenească dintr-o altă clasă de clasă derivată este în mod clar devine toți membrii clasei de bază, cu excepția designeri și tehnici de finalizare. O clasă derivată poate astfel refolosi cod în clasa de bază, fără a fi nevoie să re-l pună în aplicare. Clasa derivată poate adăuga mai mulți membri. Astfel, clasa derivată extinde funcționalitatea clasei de bază.

Următoarea figură prezintă WorkItem de clasă. reprezentând elementul de lucru în procesul de afaceri. Ca și alte clase, este derivat din System.Object și moștenește toate metodele sale. În WorkItem are cinci dintre proprii membri. Acestea includ un constructor, așa cum constructorii nu sunt moștenite. Clasa de ChangeRequest moștenește de la WorkItem și reprezintă o vedere deosebită a elementului operațiunii. ChangeRequest adaugă câte doi membri ai membrilor moștenit de la WorkItem și obiect. Ar trebui să adăugați propriul său constructor, și, de asemenea, adaugă originalItemID. originalItemID proprietate permite instanțe asociate ChangeRequest cu WorkItem obiectului original. la care se aplică solicitarea de modificare.

Următorul exemplu arată cum să-și exprime în relațiile C # clasă, așa cum sa demonstrat în figura anterioară. Exemplul arată, de asemenea modul în care WorkItem suprascrie o metodă virtuală și modul în care clasa Object.ToString ChangeRequest WorkItem moștenește punerea în aplicare a metodei.

metode abstracte și virtuale

Atunci când o clasă de bază declară o metodă ca virtuală. o clasă derivată poate suprascrie metoda cu ajutorul propriei sale realizare. În cazul în care clasa de bază declară un membru ca un rezumat. această metodă trebuie să fie înlocuite în orice clasă de bază non-abstractă, care moștenește direct din această clasă. În cazul în care clasa derivată în sine este abstractă, ea moștenește membri abstracte, fără a le pune în aplicare. Membrii Rezumat și virtuale sunt baza pentru polimorfism, care este a doua caracteristică importantă a programării orientate pe obiecte. Pentru mai multe informații, consultați. Polimorfism în secțiunea.

clase de bază abstracte

Puteți declara o clasă abstractă. dacă doriți să împiedicați instanțierea directă folosind noul cuvânt cheie. Cu această abordare, clasa poate fi utilizat numai în cazul în care noua clasă este derivată din acesta. O clasă abstractă poate conține una sau mai multe semnături metodă care sunt ele însele declarate ca fiind abstracte. Aceste semnături definesc valoarea parametrilor și retur, dar nu au nici o punere în aplicare (organism metoda). clase abstracte nu sunt neapărat membri abstracte conțin; Cu toate acestea, în cazul în care clasa conține încă un membru abstract, clasa în sine trebuie să fie declarate ca fiind abstracte. clasele derivate, care nu sunt ele însele abstracte trebuie să asigure o punere în aplicare pentru orice metode abstracte într-o clasă de bază abstractă. Pentru informații suplimentare. A se vedea clase abstracte și etanșate și membrii clasei.

interfețe

Interfața este un tip de referință în ceva similar cu o clasă de bază abstractă care conține doar membrii abstracte. În cazul în care o clasă implementează o interfață, clasa trebuie să asigure punerea în aplicare pentru toți membrii de interfață. Într-o clasă de mai multe interfețe pot fi puse în aplicare, deși poate fi derivată dintr-o singură clasă de bază directă.

Interfețele sunt utilizate pentru a determina oportunități specifice pentru clasele care nu au neapărat o relație de identitate. De exemplu, interfața System.IEquatable pot fi puse în aplicare de către orice clasă sau structură, inclusiv codul de client pentru a determina echivalența dintre cele două tipuri de obiecte (cu toate acestea, determină tipul de echivalență). IEquatable Nu implică același tip de identitate a relației care există între bază și clasele derivate (de exemplu, mamiferul este Animal). Pentru mai multe informații, consultați. Articolul Interfețe.

Prevenirea moștenire în continuare

O clasă poate preveni moștenirea de la alte clase sau moștenire de la oricare dintre membrii săi, declarându-se membri sau sigilate. Pentru informații suplimentare. A se vedea clase abstracte și etanșate și membrii clasei.

Ascunderea membri ai clasei de bază de clasă derivate