Structuri ca domeniu

Este cunoscut faptul că structura - este tipuri importante, și, astfel, a trecut prin valoare. Și devine o problemă atunci când doriți să utilizați structuri gata făcute ca câmpuri sau proprietăți ale claselor. Cu ei, devine imposibil să funcționeze, astfel încât atunci când încercați să schimbați anumite câmpuri din structura (care este o proprietate sau de câmp), compilatorul plânge de eroare.

În principiu, comportamentul nimic surprinzător, acest lucru este de așteptat, apelantul este trimis o copie a structurii și compilatorul face clar că modificați copia, dar nu e nimic la impact. Acest lucru este de înțeles, dar ce?

În acest caz, modificați Coordinates.X de cod extern va fi imposibil. Care este practica de a lucra cu structurile de ambele domenii / proprietăți? Pe exemplul de mai sus, cum se schimba structura?

set 11 august '16 la 15:28

@YesMan: Câmpul nu este „a trecut prin referință“. Tu doar lucrezi cu câmpul în sine, lvalue în ceea ce privește C ++. Dar proprietăți getter - este o funcție obișnuită, și, prin urmare, la fel ca orice funcție, returnează întotdeauna o copie a valorii de tipuri de valoare (și o copie de referință pentru tipurile de referință). - Vladd 15 august '16 la 17:54

Structura este de obicei necesară pentru a putea efectua o operație, o astfel de comparație sau atribuirea grupului de date, inclusiv eterogene. Nu înseamnă că structurile trebuie să fie amortizată în arhivă, o mulțime de probleme care trebuie rezolvate, și soluționate de către structurile în alte limbi, C # rezolva mai mult succes clase cu drepturi depline.

În clasa System.Windows.Forms.Control codul sursă. Puteți vedea punerea în aplicare a dimensiunii proprietăților. ca un exemplu de modul în care Microsoft utilizează structura.

Noi controlam o lățime de câmp și înălțime. Cele proprietăți asemănătoare lățime și înălțime, și proprietatea Dimensiune. care returnează valorile pentru lățime și înălțime ca structura de un singur tip de System.Drawing.Size. Pentru a schimba dimensiunea aveți mai puțin de două moduri: setați lățimea și înălțimea separat prin proprietățile respective, sau setați ambele dimensiuni, la o dată folosind structura Dimensiune. de exemplu, copiate dintr-un alt control.

Dacă luăm în considerare a locației. apoi găsi proprietățile individuale pentru X și Y nu funcționează, ele nu există, deși sunt utilizate într-un anumit domeniu coordonatele x și y pentru depozitare. În principiu, se poate folosi în interiorul unei structuri, deoarece coordonatele unui punct rar folosit separat.

În opinia mea - acesta este un destul de bun exemplu de aplicare practică a structurilor, ținând seama de caracteristicile lor specifice.

Microsoft are o exemple de mai puțin de succes, cum ar fi proprietatea Control.Font. care pare destul de ciudat să nu fie în măsură să specifice, de exemplu, atributul font Bold fără a înlocui întreaga structură a fontului. dar dacă te uiți atent la codul sursă puteți vedea că această proprietate este asociat cu codul WinAPI unmanaged și probabil mult mai avut nici o alegere, nu de numărare desigur nerealiste în practică opțiunea „gash rapidă nou API“.

Utilizați instrumentele disponibile pentru alte scopuri (în diferite limbi poate fi diferit, este normal).

Răspuns 11 '16 august la ora 16:27

articole similare