26-41

9
26. Ferestre child. Butoanele și input focus. //Дочерние окна. Кнопки и фокус ввода Butoanele de tip „Push”, check-box-urile, radio butoanele recepționează input focus-ul atunci cînd sut acționate cu mouse-ul. Windows semnalează faptul că fereastra descendent l-a recepționat înconjurînd-o printr-un dreptunghi întrerupt. Atunci cînd fereastra descendent recepționează input focus-ul, fereastra părinte îl pierde. Astfel putem spune că acționarea oricărui buton de la tastatură se va răsfrînge asupra ferestrei descendent. Totuși , acestea răspund doar la acționarea butonului SPACE. Atunci cînd SO schimbă input focus-ul de la o fereastră la alta (de la părinte la descendent, de exemplu), acesta trimite mesaje WM_KILLFOCUS și WM_SETFOCUS. Mai întîi acesta trimite mesaj WM_KILLFOCUS ferestrei care pierde input-focus-ul. Parametrul wParam conține variabila handle a ferestrei care trebuie să primească input focus-ul. După aceasta SO trimite mesaj WM_SETFOCUS ferestrei, care trebuie să-l primească, iar wParam conține variabila handle a ferestrei care a pierdut input focus-ul. Fereastra parinte poate preveni fereastra descendent de a recepționa input focus-ul, tratînd mesajul WM_KILLFOCUS. Astfel, dacă fereastra părinte pierde input focus-ul, ea îl poate restabili apelînd SetFocus(), indicînd ca parametru variabila handle a ferestrei părinte. 27. Ferestre child. Butoane visibile și accesibile. //Дочерние окна. Видимые и доступные кнопки Pentru a putea fi acționate de la mouse sau tastatură, ferestrele descendent trebuie să fie vizibile și activate. Vizibilitatea ferestrei se indică prin flagul WS_VISIBLE în timpul apelării funcției CreateWindow(), alături de flagul WS_CHILD și stilul butonului. Fără flagul WS_VISIBLE, fereastra descendent nu va fi afișată pînă cînd nu va fi apelată suplimentar funcția ShowWindow(), unul dintre parametri fiind variabila handle a ferestrei descendent. Oricare fereastră descendent este în mod implicit activată. Pentru a deactiva oricare fereastră descendent, trebuie apelată funcția EnableWindow(hWndChild, FALSE), unde hWndChild este variabila handle a ferestrei descendent. O fereastră descdendent deactivată are textul colorat în gri și nu poate fi acționată. Parametrul TRUE în funcția de mai sus reactivează fereastra în caz de necesitate. Verificarea vizibilității sau faptului dacă este vreo fereastră activată se face cu ajutorul funcțiilor IsWindowVisible și IsWindowEnabled 28. Ferestre child. Check box. //Дочерние окна. Флажки Check box-ul sau caseta de validare este o casetă pătrată, care poate fi bifată și care afișează un text în rînd cu această casetă. Acționează ca un comutator, permițind utilizatorului să aleagă careva opțiuni. Identificatorii, care permit crearea check-box-urilor: BS_CHECKBOX, BS_AUTOCHECKBOX, BS_3STATE, BS_AUTO3STATE. În cazul

Transcript of 26-41

Page 1: 26-41

26. Ferestre child. Butoanele și input focus. //Дочерние окна. Кнопки и фокус ввода

Butoanele de tip „Push”, check-box-urile, radio butoanele recepționează input focus-ul atunci cînd sut acționate cu mouse-ul. Windows semnalează faptul că fereastra descendent l-a recepționat înconjurînd-o printr-un dreptunghi întrerupt. Atunci cînd fereastra descendent recepționează input focus-ul, fereastra părinte îl pierde. Astfel putem spune că acționarea oricărui buton de la tastatură se va răsfrînge asupra ferestrei descendent. Totuși, acestea răspund doar la acționarea butonului SPACE.

Atunci cînd SO schimbă input focus-ul de la o fereastră la alta (de la părinte la descendent, de exemplu), acesta trimite mesaje WM_KILLFOCUS și WM_SETFOCUS.

Mai întîi acesta trimite mesaj WM_KILLFOCUS ferestrei care pierde input-focus-ul. Parametrul wParam conține variabila handle a ferestrei care trebuie să primească input focus-ul.

După aceasta SO trimite mesaj WM_SETFOCUS ferestrei, care trebuie să-l primească, iar wParam conține variabila handle a ferestrei care a pierdut input focus-ul.

Fereastra parinte poate preveni fereastra descendent de a recepționa input focus-ul, tratînd mesajul WM_KILLFOCUS. Astfel, dacă fereastra părinte pierde input focus-ul, ea îl poate restabili apelînd SetFocus(), indicînd ca parametru variabila handle a ferestrei părinte.

27. Ferestre child. Butoane visibile și accesibile. //Дочерние окна. Видимые и доступные кнопки

Pentru a putea fi acționate de la mouse sau tastatură, ferestrele descendent trebuie să fie vizibile și activate. Vizibilitatea ferestrei se indică prin flagul WS_VISIBLE în timpul apelării funcției CreateWindow(), alături de flagul WS_CHILD și stilul butonului. Fără flagul WS_VISIBLE, fereastra descendent nu va fi afișată pînă cînd nu va fi apelată suplimentar funcția ShowWindow(), unul dintre parametri fiind variabila handle a ferestrei descendent.Oricare fereastră descendent este în mod implicit activată. Pentru a deactiva oricare fereastră descendent, trebuie apelată funcția EnableWindow(hWndChild, FALSE), unde hWndChild este variabila handle a ferestrei descendent. O fereastră descdendent deactivată are textul colorat în gri și nu poate fi acționată. Parametrul TRUE în funcția de mai sus reactivează fereastra în caz de necesitate.

Verificarea vizibilității sau faptului dacă este vreo fereastră activată se face cu ajutorul funcțiilor IsWindowVisible și IsWindowEnabled

28. Ferestre child. Check box. //Дочерние окна. Флажки

Check box-ul sau caseta de validare este o casetă pătrată, care poate fi bifată și care afișează un text în rînd cu această casetă. Acționează ca un comutator, permițind utilizatorului să aleagă careva opțiuni. Identificatorii, care permit crearea check-box-urilor: BS_CHECKBOX, BS_AUTOCHECKBOX, BS_3STATE, BS_AUTO3STATE. În cazul check-box-urilor simple, pentru a le comuta, trebuie trimis mesajul BM_SETCHECK, atunci cînd se procesează mesajul WM_COMMAND. Fără acest mesaj, caseta de validare nu poate fi comutată prin intermediul mouse-ului sau a tastaturii. Atunci cînd este ales BS_AUTOCHECKBOX, acesta se validează automat cînd este acționat prin intermediul mouse-ului. BS_3STATE și BS_AUTO3STATE indică casete de validare care permit alegerea opțiunilor intermediare, pe lîngă cele standard: ON sau OFF. În practică, aceasta înseamnă că pe lîngă bifa tradițională, caseta poate fi colorată în culoare sură, determinînd astfel a 3-a opțiune.Casetele de validare sunt aliniate la stînga dreptunghiului zonei client și plasate în poziția specificată în timpul apelului funcției CreateWindow(). Înălțimea minimă a casetei de validare este înălțimea unui caracter, iar lungimea – lungimea textului afișat +2.

29. Ferestre child. Clasa barelor de derulare. //Дочерние окна. Класс полос прокрутки

Pentru a utiliza barele de derulare în zona client, trebuie create ferestre descendent pe baza clasei barelor de derulare. Controalele de tip scroll bar pot fi create prin utilizarea identificatorului SBS_VERT sau SBS_HORZ. În comparație cu butoanele obișnuite, ferestrele de tip scroll bar nu trimit mesaje WM_COMMAND, ci WM_HSCROLL sau WM_VSCROLL. Diferența între barele de derulare a ferestrei și ferestrele descendent de tip bare de derulare este în parametrii lParam: pentru barele de derulare a ferestrei părinte el va fi 0, iar pentru cele descendent – variabila handle a ferestrei descendent. Parametrul wParam este utilizat la fel pentru barele ferestrei părinte, cît și pentru ferestrele descendent.

Page 2: 26-41

Barele de derulare a ferestrei părinte sunt de dimensiuni fixe. În cazul ferestrelor descendent acestea pot fi modificate în timpul apelului funcției CreateWindow(), în cîmpurile destinate indicării dimensiunilor ferestrei.

30. Ferestre child. Clasa de redactare. //Дочерние окна. Класс редактирования

Clasa de editare este utilizată pentru a crea o fereastră descendent pentru editare a textului. Aceasta este un dreptunghi, în care poate fi introdus oricare text, pentru a putea fi manipulat ulterior. Pentru a crea o astfel de fereastră descendent, este necesar de a utiliza numele clasei „edit”, atunci cînd se apelează funcția CreateWindow(). Pentru a seta anumite caracteristici ale textului introdus în caseta de editare, pot fi folosiți indicatori: ES_LEFT, ES_AUTOHSCROLL, ES_LOWERCASE, etc.

31. Ferestre child. Clasa static. //Дочерние окна. Класс статических дочерних окон

Pentru a crea ferestre descendent statice, este necesar de a indica numele clasei „static”, la crearea ferestrei prin apel la CreateWindow(). Aceste ferestre nu primesc comenzi de la tastatură sau mouse și nu trimit mesaje WM_COMMAND. Atunci cînd este mutat mouse-ul deasupra unei ferestre statice, sau se execută un click pe aceasta, fereastra descendent primește un mesaj WM_NCHITTEST și returnează valoarea HTTRANSPARENT. Astfel SO trimite același mesaj ferestrei de sub fereastra descendent, care de obicei este fereastra părinte. Aceasta trimite mesajul funcției DefWindowProc, rezultînd astfel un mesaj de mouse corespunzător zonei client.Practic, ferestrele descendent create pe baza clasei statice sunt dreptunghiuri asemănătoare cu dreptunghiul zonei client, care prin intermediul indicatorilor pot fi colorate diferit (SS_BLACKRECT) și pot conține text aliniat în mod diferit (SS_LEFT).

32. Ferestre child. Coduri de înștiințare. //Дочерние окна. Коды уведомления управляющих окон редактирования

Ferestrele descendent pot comunica cu ferestrele părinte în ambele sensuri. Ferestrele descendent generează mesaje WM_COMMAND, care le transmite ferestrei părinte. lParam conține variabila handle a ferestrei descendent, LOWORD (wParam) – conține identificatorul ferestrei descendent, HIWORD (wParam) – conține codul de înștiințare transmis ferestrei părinte. Exemplu de cod de înștiințare: BN_CLICKED (valoarea 0), BN_PUSHED (valoarea 2), etc.

33. Ferestre child. Colorarea barelor de derulare și a textului static. //Дочерние окна. Окрашивание полос прокрутки и статического текста

Colorarea barelor de derulare se face prin tratarea mesajelor WM_CTLCOLORSCROLLBAR. Ca răspuns la acest mesaj, fereastra părinte poate utiliza contextul de dispoztitv pentru a seta culoarea barei. De fapt tratarea acestui mesaj returnează variabila handle a pensulei utilizate pentru desenarea barei de derulare.

În cazul textului static este tratat mesajul WM_CTLCOLORSTATIC, ulterior apelîndu-se funcțiile SetBkColor() - pentru fundal sau SetTextColor() – pentru text.

34. Ferestre child. Colorarea fondului. //Дочерние окна. Закрашивание фона(*traducere din engleză – Petzold – BackGround Color) În mod implicit, ferestrele descendent sunt desenate utilizînd pensula de culoare gri, pentru că butoanele au fost create pentru a fi utilizate în casetele de dialog, a căror fundal este de această culoare. Setarea culorii de fundal a ferestrei părinte se face în timpul setării parametrilor clasei ferestrei: wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH).Pentru a adapta culoarea ferestrei descendent la culoarea fundalului ferestrei părinte vom fi nevoiți ori să schimbăm modalitatea de desenare a fundalului ferestrei părinte, ori să schimbăm culoarea ferestrei descendent. O modalitate de a înțelege cum aceasta se face este înțelegerea culorilor de sistem (întrebarea 35)

(Petzold – Coloring the Background - ** cred că proful asta a avut în vedere)În programul cu bare de derulare, care schimbă culoarea fundalului ferestrei părinte, culoarea de fundal este setată în felul următor: wndclass.hbrBackground = CreateSolidBrush (0)

Page 3: 26-41

Atunci cînd este mutată bara de derulare, programul trebuie să creeze o nouă pensulă și să transmită variabila handle a pensulei structurii clasei de fereastră. Accesarea acestei variabile handle se face prin apel la funcția GetClassWord., iar setarea – prin SetClassWord.Atunci cînd oricare dintre bare își schimbă poziția, se șterge pensula folosită și se creează una nouă prin apel la funcția:SetClassLong (hwnd, GCL_HBRBACKGROUND, (LONG)CreateSolidBrush (RGB (color[0],color[1],

color[2]))))Cînd este necesară recolorarea fundalului se apelează InvalidateRect(), ceea ce determină plasarea în coadă a unui mesaj WM_PAINT. Astfel încît acesta este un mesaj de prioritate joasă, el nu va fi procesat atît timp cît se porcesează mesajele provenite de la barele de derulare. Putem corecta acest lucru prin apel implicit al funcției UpdateWindow(hWnd). Totuși UpdateWindow() poate frîna interpretarea tastelor mouse-ului și a tastaturii. Putem deci transmite tratarea mesajelor WM_PAINT funcției DefWindowProc(), ceea ce înseamnă ca programul nostru va trata doar un BeginPaint() și EndPaint() atunci cînd îi va fi trimis un mesaj WM_PAINT.

35. Ferestre child. Culori de sistem. //Дочерние окна. Системные цвета

SO Windows utilizează 29 de culori pentru a desena diferite componente arătate la ecran. Aceste 29 de culori pot fi accesate prin GetSysColor() și modificate prin SetSysColor(). Identificatorii definiți în fișierele header specifică culorile de sistem.**Setarea culorii de sistem prin SetSysColor() se face doar pentru sesiunea de Windows curentă.Culorile de sistem (unele) pot fi modificate și din Control Panel. Culorile selectate sunt stocate în registru pentru WinNT și în fișierul WIN.INI pentru Win98. Atît în registru, cît și în fișierul WIN.INI, cuvintele cheie pentru culorile de sistem sunt diferite de identificatorii utilizați la apelurile funcțiilor GetSysColor() sau SetSysColor().Exemplu: Identificatorul GetSysColor() sau SetSysColor() COLOR_SCROLLBAR

Identificatorul din registru sau WIN.INI Scrollbar Culoarea standard RGB C0−C0−C0

Este utilizat pentru setarea culorii barelor de derulare.** Progresul SO Windows a determinat utilizarea elementelor grafice mai sofisticate, incluzînd diferite elemente 3D, ceea ce a determinat mărirea numărului culorilor de sistem. Astfel, pentru versiunile mai recente de Windows, identificatorii culorilor pot să nu mai fie atît de expliciți:COLOR_SCROLLBAR setează culoarea barelor de derulare.

36. Ferestre child. Interfața tastaturii. //Дочерние окна. Интерфейс клавиатуры, поддерживаемый автоматически

Barele de derulare pot procesa acționările butoanelor de la tastatură. Astfel acționarea butoanelor Home, End, Page Up, Page Down generează diferite valori pentru parametrul wParam, în cazul mesajelor legate de barele de derulare: SB_TOP, SB_BOTTOM, SB_PAGEUP, SB_PAGEDOWN respectiv.

Pentru a transmite input focus-ul barei de derulare atunci cînd este acționată cu mouse-ul, trebuie inclus identificatorul WS_TABSTOP atunci cînd se crează fereastra descendent prin CreateWindow().Ulterior trebuie tratat mesajul WM_SETFOCUS, apelîndu-se funcția SetFocus (hwndScroll[idFocus]), unde hWndScroll este variabila handle a ferestrei descendent, iar idFocus o variabilă globală.

Atribuirea input focus-ului barei de derulare determină utilizarea interfeței complete a tastaturii de către bara de derulare. Oricum, aceasta va ignora o bună parte din butoane, axîndu-se doar pe cele, care determină poziția cursorului.

37. Ferestre child. Introducerea unei proceduri de fereastră noi. //Дочерние окна. Введение новой оконной процедуры

Presupunem că avem situația: avem mai multe bare de derulare în zona client și este necesitatea de a transmite input focus-ul de la una la alta prin intermediul tastei Tab. Dificultatea o reprezintă faptul că o bară de derulare deja deține input focus-ul și ignoră apăsarea Tab-ului.

Pentru a rezolva această problemă trebuie introdusă o nouă procedură de fereastră pentru fereastra descendent, care va trata anumite mesaje, de care avem nevoie și va transmite controlul procedurii de fereastră implicite. Setarea unei noi proceduri de fereastră se face prin apel la funcția SetWindowLong().

Astfel, pentru fiecare dintre barele de derulare prezente se apelează această funcție:

Page 4: 26-41

OldScroll[i] = (WNDPROC) SetWindowLong (hwndScroll[i], GWL_WNDPROC,(LONG) ScrollProc))În rezultat, ScrollProc va recepționa toate mesajele, pe care SO le trimite barelor de derulare în

cadrul programului.

38. Ferestre child. Mesajul WM_CTLCOLORBTN. //Дочерние окна. Сообщение WM_CTLCOLORBTN

Astfel încît este posibil de a seta culoarea zonei client și a textului afișat, astfel încît culoarea acestora să coincidă cu culoarea butoanelor și a ferestrelor descendent. Apare întrebarea: este posibil de a adapta culoarea butoanelor la culorile pe care le preferăm? Teoretic – da, practic – nu, pentru că unica posibilitate de a o face este funcția SetSysColor(). Însă această funcție determină schimbarea tuturor culorilor în sistem ceea ce le-ar schimba în toate aplicațiile, care rulează curent în Windows.O altă modalitate (teoretic) mai bună este tratarea mesajelor WM_CTLCOLORBTN. Acest mesaj este trimis de către fereastra descendent atunci cînd aceasta își desenează zona client. Aici este cazul de a schimba culorile, pe care fereastra descendent le folosește pentru a colora fundalul: SetBkColor() sau pentru a scrie un text: SetTextColor().Problema care apare este faptul că doar butoanele de tip Push sau cele desenate de utilizator trimit astfel de mesaj ferestrei părinte și doar butoanele owner-draw (desenate de utilizator) răspund la procesarea acestui mesaj de către fereastra părinte, ceea ce, de fapt, este inutil pentru că în final anume fereastra părinte este responsabilă de desenarea butoanelor.

39. Ferestre child. Radio buttons. //Дочерние окна. Переключатели

Radio buton este o fereastră descendent, care, în grup, permit alegerea unor opțiuni, care se exclud reciproc. Arată ca o casetă de validare, numai că în loc de casetă este un cerculeț alb, care, în caz că este validat, este marcat de un cerculeț negru mai mic.Indicatorii utilizați pentru crearea unui buton radio: BS_RADIOBUTTON, BS_AUTORADIOBUTTON.Diferența între aceștia este faptul că pentru primul trebuie controlată manual marcarea lui, adică pentru a permite validarea acestuia trebuie apelată funcția SendMessage() cu parametrul BM_SETCHECK și wParam egal cu 1: SendMessage (hwndButton, BM_SETCHECK, 1, 0)Auto-radio-butonul se validează automat la acționarea lui prin intermediul unui dispozitiv de intrare (mouse, tastatură).Stingerea butoanelor radio, adică interzicerea validării lor se face prin apel la funcția SendMessage (hwndButton, BM_SETCHECK, 0, 0), unde wParam este egal cu 0.**Diferența substanțială între o casetă de validare și buton radio este faptul că un buton radio nu poate fi invalidat prin apăsare repetată. El este asemănător cu butoanele cu ajutorul cărora se alege frecvența radio prestabilită din automobile: doar un buton poate fi acționat într-un moment de timp.

40. Ferestre child. Stilurile clasa de redactare. //Дочерние окна. Стили класса редактирования

Implicit o fereastră descendent de editare are doar o singură linie. ES_MULTILINE transformă fereastra de editare într-una cu mai multe linii. ES_AUTOVSCROLL automat derulează pe verticală textul scris, iar ES_AUTOHSCROLL – pe orizontală. Pentru adăugarea barelor de derulare în fereastra de editare, trebuie folosiți indicatorii barelor de derulare standard WS_HSCROLL, WS_VSCROLL. Atunci cînd este ales un text, el încetează să fie evidențiat cînd fereastra de editare pierde input-focus-ul. Pentru a preveni acest fapt trebuie folosit indicatorul ES_NOHIDESEL. Toți acești indicatori determină stilul ferestrei de editare.

41. Ferestre child. Utilizarea ferestrelor de redactare de control. //Дочерние окна. Использование управляющих окон редактирования

Atunci cînd se utilizează mai multe ferestre de editare, este necesar de a utiliza principiul windows subclassing pentru a semnala trecerea de la o fereastră de editare la alta, adică de a crea o procedură de fereastră specifică pentru fiecare fereastră de editare. O altă modalitate este interceptarea butoanelor Tab sau Shift-Tab.

Există diverse mesaje pentru interacționarea cu textul introdus în caseta de editare. Toate aceste mesaje sunt trimise prin intermediul funcției SendMessage(), utilizînd indicatorul necesar WM_COPY, WM_CUT, etc.

Page 5: 26-41

Se poate obține începutul șirului și sfîrșitul acestuia (SendMessage (hwndEdit, EM_GETSEL, (WPARAM) &iStart,(LPARAM) &iEnd)), poate fi înlocuit textul cu un alt șir (SendMessage (hwndEdit, EM_REPLACESEL, 0, (LPARAM) szString)) sau obținut numărul de linii (iCount = SendMessage (hwndEdit, EM_GETLINECOUNT, 0, 0) ;).

87. STRUCTURA UNEI APLICAŢII ORIENTATĂ PE OBIECTE ÎN C#. Clasă de bază și clase derivate.În C#, funcționalitatea unei clase poate fi extinsă aplicînd moștenirea. Clasa derivată poate moșteni atributele clasei de bază, metodele acesteia. De asemenea pot fi suprascrise proprietățile sau metodele, la necesitate. Moștenirea se definește prin operatorul : . Nu este permisă moștenirea de la mai mult de o clasă de bază.

public class Parent //clasa de bază{    string parentString;    public Parent() //constructorul clasei de bază    {        Console.WriteLine("Parent Constructor.");    }    public Parent(string myString) //metoda clasei de bază    {        parentString = myString;        Console.WriteLine(parentString);    }    public void print() //metoda clasei de bază    {        Console.WriteLine("I'm a Parent Class.");    }} public class Child : Parent //clasa derivată{

public Child() : base("From Derived") //base este utilizat pentru a accesa metodele clasei de bază din clasa derivată

    {        Console.WriteLine("Child Constructor.");    }    public new void print()    {        base.print(); //base accesează metoda print din clasa parent        Console.WriteLine("I'm a Child Class.");    }    public static void Main()    {        Child child = new Child(); //se inițializează un obiect de tip Child        child.print(); //se vor afișa 2 șiruri > unul prin

base.print, altul prin writeline()        ((Parent)child).print(); //se accesează metoda print din clasa de bază    }}

88. STRUCTURA UNEI APLICAŢII ORIENTATĂ PE OBIECTE ÎN C#. Constructori. Supraîncărcarea constructorilor și definirea constructorilor în clasele derivate. Destructor. Metode.

Cîteva noțiuni legate de constructorii unei clase:Constructorul este o funcție care face parte din corpul unei clase. Corpul constructorului este formatdin instrucțiuni care se execută la crearea unui nou obiect al clasei respective (sau la crearea clasei,în cazul constructorilor cu modificatorul static).

pot exista mai mulți constructori care se pot diferenția prin lista lor de parametri constructorii nu pot fi moșteniți dacă o clasă nu are definit niciun constructor, se va asigna automat constructorul fără parametri al clasei de

bază (clasa object, dacă nu este precizată clasa de bază)

Page 6: 26-41

Instanțierea presupune declararea unei variabile de tipul clasei respective și inițializarea acesteia prin apelul constructorului clasei (unul dintre ei, dacă sunt definiți mai mulți) precedat de operatorulnew.public class Copil{protected string nume; //data accesibila numai in interiorul//clasei si a claselor derivatepublic Copil ( ) //constructorul fara parametrii ai clasei{nume = Console.ReadLine( );}public Copil (string s) //constructor cu parametru{nume = s;}}class Fetita: Copil{public Fetita (string s): base(s) //base semnifica faptul ca{ //se face apel lanume = "Fetita "+ nume; //constructorul//din clasa de baza} }...Copil c1 = new Copil ( ); //numele copilului se citeste de la//tastaturaCopil c2 = new Copil ("Gigel"); //numele lui c2 va fi GigelFetita f1 = new Fetita ( );Fetita f2 = new Fetita ("Maria");Destructor:Corpul destructorului este format din instrucțiuni care se execută la distrugerea unui obiect al clasei respective. Pentru orice clasă poate fi definit un singur constructor. Destructorii nu pot fi moșteniți. În mod normal, destructorul nu este apelat în mod explicit, deoarece procesul de distrugere a unui obiect este invocat și gestionat automat de Garbage Collector

89. CLASE ŞI FUNCŢII GENERICE. DERIVAREA CLASELOR (MOŞTENIRE). Principiile moștenirii. Accesibilitatea membrilor moșteniți.

90. Metode. Interfețe în C#.