Alegerea între o clasă, o componentă și un control

O caracteristică importantă a componentelor din .NET Framework este că acestea suportă proiectarea. Aceasta înseamnă că clasa de componente poate fi utilizată într-un mediu de dezvoltare rapidă a aplicațiilor, de exemplu în Visual Studio. Puteți adăuga o componentă în bara de instrumente Visual Studio sau o puteți glisa într-un formular. De asemenea, puteți lucra cu acesta pe suprafața de dezvoltare. Rețineți că suportul de bază pentru tipurile IComponent la momentul designului este integrat în .NET Framework; dezvoltatorii de componente nu trebuie să depună eforturi suplimentare pentru a profita de funcțiile de bază suportate în timpul dezvoltării.

Componenta poate fi localizată (localizată) într-un container (conceptul va fi definit mai târziu în această secțiune). Dacă componenta este plasată pe un substrat, aceasta interacționează cu containerul prin acest substrat (conceptul va fi definit mai târziu în această secțiune) și poate solicita și primi prin acesta și serviciile containerului său. Pentru a se asigura că resursele sunt eliberate atunci când containerul este distrus, containerul trebuie să implementeze interfața IDisposable. În implementarea metodei Dispose, containerul trebuie să elibereze toate resursele pe care le utilizează și, de asemenea, să apeleze metoda Dispose pentru toate componentele pe care le conține.

Nesting-ul este furnizat la un nivel logic și poate să nu aibă o reprezentare vizuală. Un container de nivel intermediar care conține componente de bază de date este un exemplu de cuibărit care nu are o reprezentare vizuală. Visual cuibărit este observat în Windows Forms Designer și Visual Studio Web Forms Designer. O suprafață vizuală de dezvoltare este un container care conține o componentă de formă (în cazul designerului Web Forms, o componentă a paginii).

Componentele pot sau nu susțin interacțiunea de la distanță. Componentele care o susțin sunt marcate prin referință sau prin valoare. Procesul de marshaling implică transferarea obiectelor dincolo de limitele entităților, cum ar fi domeniile de aplicare (procese ușoare), procese și chiar mașini. Dacă gruparea este efectuată prin referință, se creează un proxy care efectuează apeluri la distanță către obiect. Dacă marshalingul este efectuat prin valoare, copia serializată a obiectului este trimisă prin limita corespunzătoare.

Marshaling-ul componentelor de suport pentru interacțiune de la distanță care încapsulează resursele de sistem sunt mari sau există ca instanțe separate, ar trebui efectuate prin referință. Clasa de bază a componentelor care sunt marcate prin referință este Componentă. Această clasă de bază implementează interfața IComponent și moștenește din clasa MarshalByRefObject. Multe componente ale bibliotecii de clasă .NET Framework provin din clasa Component. inclusiv Control (clasa de bază pentru controalele Windows Forms), WebService (clasa de bază pentru serviciile Web XML create folosind ASP.NET) și Timer (clasa care creează evenimente recurente).

Marshaling de componente de sprijin de interacțiune de la distanță, care pur și simplu păstrează starea, trebuie să fie efectuate de valoare. Clasa de bază a componentelor a căror marshaling este efectuată prin valoare este MarshalByValueComponent. Această clasă de bază implementează interfața IComponent și moștenește din clasa Object. Doar câteva componente ale bibliotecii de clasă .NET Framework provin din clasa MarshalByValueComponent. Toate aceste componente aparțin spațiului de nume System.Data (DataColumn.DataSet.DataTable.DataView și DataViewManager).

Clasele de bază pentru obiectele marcate prin valoare și prin referință sunt Object și MarshalByRefObject, dar numele claselor derivate corespunzătoare sunt MarshalByValueComponent și Component. Logica numelui este că tipul cel mai frecvent utilizat are un nume mai simplu.

Dacă nu este de așteptat o interacțiune de componente la distanță, nu ar trebui să o moșteniți de la implementarea de bază a clasei Component; în schimb, interfața IComponent ar trebui implementată direct.

Articole similare