anunțuri de moștenire Sintaxă

public class derivată: mybase // Moștenirea

metode virtuale

Mecanism funcții virtuale - una dintre implementările conceptele de bază ale OOP - polimorfism. Acest mecanism implică utilizarea ideii de „o singură interfață, mai multe metode de punere în aplicare.“ Această idee este că clasa de bază prevede clasele derivate toate elementele pe care aceste clase pot fi utilizate direct, și conține, de asemenea, un set de funcții care clasele derivate trebuie să pună în aplicare de către acestea suprascriu (crearea de propriul cod funcție într-o clasă derivată, prin ascunderea sau înlocuire punerea în aplicare a codului de bază).

Metoda virtuală - o funcție declarată cu clasa cheie de bază slovomvirtualv și redefinit într-una sau mai multe derivate din această clasă. Cerință obligatorie: antet funcția ar trebui să fie exact la fel ca și în clasa de bază. Apoi, atunci când creați un obiect sau de bază, sau la oricare dintre clasele derivate compilatorul determină care dintre funcțiile pe care doriți să le apelați, în funcție de tipul de obiect.

Conditii de utilizare metode virtuale

1. În cazul în care funcția virtualnaya într-o clasă, acesta va fi un virtuală indiferent de nivelul ierarhiei.

2. În cazul în care într-o clasă derivată funcție virtuală nu este suprascrisă, folosește versiunea din clasa de bază.

Funcția 3.Virtualnye trebuie să aibă aceeași interfață în întreaga ierarhie de clase.

Polimorfismul - capacitatea diferitelor clase de obiecte legate de moștenire în moduri diferite de a răspunde apelului de aceeași funcție.

Ascunderea metodele clasei de bază

Când moștenesc un membru al clasei de bază este moștenită și, de asemenea, punerea în aplicare a acestuia. În cazul în care un membru yavlyaetsyavirtualnym moștenit. este posibil să suprascrie punerea în aplicare a acestuia, folosind slovooverride cheie. Indiferent dacă un membru al unei moștenit virtuale, mozhnoskryt punerea sa în aplicare, dacă este necesar. De exemplu, acest lucru este util atunci când moștenit termenul general nu funcționează așa cum se dorește. Tăinuirea se realizează folosind următorul cod:

public class derivată: mybase

Cu toate că acest cod va funcționa în mod corespunzător, acesta va genera un avertisment că elementul de clasă de bază este ascuns în ea. Acest lucru face posibil să se stabilească situația când și-au ascuns accidental membru care chiar doresc să utilizeze. În cazul în care membrul doresc într-adevăr să se ascundă, atunci se poate spune în mod clar, folosind slovomnew cheie:

Acest cod va lucra exact la fel, numai fără emiterea unui avertisment.

Diferența dintre latente și supracontrol bazei membrii clasei uita-te la un exemplu:

public class mybase

public class derivată: mybase

În acest caz, o înlocuire a f () metoda înlocuiește punerea în aplicare clasă de bază, astfel încât o nouă versiune a codului de lângă care urmează să fie utilizat, în ciuda faptului că tratamentul are loc prin intermediul clasei de bază de tip metoda (folosind polimorfism):

derivat d = nou derivat ();

b = d; // nota atribuirea de instanțe de clasă

O alternativă este de a ascunde metoda clasei de bază cu următorul cod:

public class mybase

public void virtuale f () Console.WriteLine ( „Punerea în aplicare de bază„)>

clasa publica derivate. mybase

Metoda de clasă de bază, în acest caz, nu trebuie neapărat să fie virtual, cu toate acestea, acest lucru nu se va schimba nimic, iar codul prezentat aici este diferit de cel precedent numai într-o singură linie. Rezultatul acestui cod de funcționare, ca într-o metodă virtuală, și care altfel ar fi după cum urmează: implementarea de bază

În ciuda faptului că punerea în aplicare care stau la baza este ascuns la ea, ca și mai înainte, există un acces prin clasa de bază.