2008-11-19 4 views

Odpowiedz

30

Nie - jest więcej. ComponentModel pozwala na wykonanie kilku rzeczy typu DLR, takich jak właściwości środowiska wykonawczego. W ten sposób DataView udostępnia kolumny do siatki - nie są to właściwości odbicia - są to właściwości środowiska wykonawczego. Słowa kluczowe są tutaj: ICustomTypeDescriptor i TypeDescriptionProvider.

Ten model umożliwia również abstrakcję i niezależność. Na przykład, jeśli dużo się zastanawiasz nad właściwościami, rozważ HyperDescriptor - to narzędzie, które napisałem, używa niestandardowej implementacji PropertyDescriptor, aby zamienić model odbicia dla wstępnie skompilowanego modelu, w celu zwiększenia wydajności.

Pod względem użytkowania istnieją pewne inne różnice; ComponentModel obsługuje tylko jedną instancję dowolnego atrybutu na elemencie członkowskim (w przeciwieństwie do odbicia, gdzie dozwolone jest wiele podobnych atrybutów). Jest to zorientowane na dane - więc istnieją właściwości, podobnie jak zdarzenia (głównie przeznaczone do powiadamiania o zmianach) - ale nie ma pól ani metod.

Posiada również dobre wsparcie dla i18n - ponieważ DisplayName itp. Można dostosować w locie.

Jednak ComponentModel nie jest (bezpośrednio) kompatybilny z takimi rzeczami jak LINQ (w szczególności MemberExpression) - ponieważ chce związać z danymi odbicia.

Wreszcie, komponent ComponentModel jest bardzo często używany w IDE przez rzeczy takie jak PropertyGrid (tak działają rzeczy takie, jak dodatkowe właściwości dla porad narzędziowych), ale równie prawie wszystkie powiązania danych interfejsu użytkownika odbywają się za pośrednictwem komponentu ComponentModel (ponieważ umożliwia to wiązanie do obsługuje DataTable, klasy i wszystko, co możesz wymyślić).

+0

Wiem, że jest starszy niż wzgórza, ale czy można wyjaśnić niektóre rzeczy, które można i nie można zrobić w LINQ, jeśli używasz System.ComponentModel do refleksji? – wootscootinboogie

+0

@woot to krótka odpowiedź: LINQ nie dba o ComponentModel –

Powiązane problemy