Udostępnij za pośrednictwem


Przegląd deskryptora typu

TypeDescriptor Architektura zwiększa możliwości.NET odbicia.

Typ deskryptora architektury

TypeDescriptor Architektury jest zbudowany na silniku odbicie core i dodaje dodatkowe zasady i funkcje.Na przykład TypeDescriptor klasy obsługuje łączących się właściwości urządzenia extender z IContainer, a także obsługuje filtrowanie właściwości i zdarzenia za pomocą IDesigner.

Ponadto TypeDescriptor architektura umożliwia kilka możliwości.W poniższej tabeli przedstawiono funkcje architektury.

Zdolność

Opis

Podstawianie instancji

Umożliwia dowolnego typu, ma zostać utworzony, gdy wymagane jest innego typu.

Podstawianie metadanych

Umożliwia metadane obiektu ma zostać zmodyfikowana.

Atrybut przekierowania

Umożliwia atrybuty, które mają być określone dynamicznie.

Podstawianie docelowych i cieniowanie

Umożliwia jednego obiektu do innego.

Obsługa deskryptora typ rozszerzony

Umożliwia dostęp do właściwości obiektu dodane przez inne obiekty.

Do obsługi tych funkcji, TypeDescriptor klasy jest ściśle zintegrowany z różnych funkcji.NET Framework składnika modelu.Jest zgodny z obiektami COM, urządzenie extender dostawców, projektanci i właściwości CLR.

[!UWAGA]

Można użyć TypeDescriptor architektury w kodzie run-time, jak również kod czasu projektowania.

Do obsługi rozszerzeń, TypeDescriptor klasa ma companion klasy o nazwie TypeDescriptionProvider i atrybut companion o nazwie TypeDescriptionProviderAttribute.Można użyć TypeDescriptionProviderAttribute w klasie wprowadzenie zupełnie inny sposób ujawnienia metadanych, który spełnia cele projektu.

Klasa TypeDescriptionProvider

TypeDescriptionProvider Klasy mogą być uznane za dodatek do TypeDescriptor klasy.Dla konkretnego wystąpienia TypeDescriptor, może istnieć wiele klas dostawcy opis typu, wszystkie metadane oferowania do TypeDescriptor.

Atrybut TypeDescriptionProvider

TypeDescriptionProviderAttribute Jest atrybut, który można umieścić na klasy.Ten atrybut jest używany do wskazują, że typ Dostawca opis typu niestandardowego, skojarzony z nim.Atrybut z kolei zapewnia sposób, poprzez metadane, aby zainstalować Dostawca opisu typu.Podczas tego typu jest przekazywana do dowolnego interfejsu API TypeDescriptor klasy, TypeDescriptor wykrywa ten atrybut, tworzy instancję Dostawca opisu typu opisane w nim i przechwytuje dostawca do wewnętrznego tabel z TypeDescriptor.Po wykonaniu tych czynności, TypeDescriptor kontynuuje przetwarzanie w interfejsie API.Przetwarzanie zezwala na typ automatycznie zainstalować dostawcę opis typu niestandardowego na żądanie.

Typ deskryptora możliwości

TypeDescriptor Architektury udostępnia funkcje wykraczające poza świadczone przez.NET Framework odbicia.

Podstawianie instancji

Podstawianie instancji występuje, gdy chcesz utworzyć jeden typ, ale typ, który jest w rzeczywistości tworzony jest inny niż użytkownik zażądał.Podstawianie instancji jest realizowane po zamianie wszystkich wywołań do new z wywołania CreateInstance metody.Ta metoda wyszukiwania wewnętrznego tabel w ramach TypeDescriptor do TypeDescriptionProvider obiekt, który jest skojarzony z typem danych danej.Jeśli zostanie znaleziony, deleguje wywołanie do tego obiektu.

Podstawianie metadanych

Podstawianie metadanych występuje, gdy chcesz modyfikować metadane dostępne dla jednego lub więcej obiektów.Wspólne stosowanie podstawiania metadanych jest w realizacji projektantów.Podstawianie metadanych można wykonywać z dostawcami opis typu, które mogą być dodawane i usuwane przy użyciu następujących metod na TypeDescriptor:

Atrybut przekierowania

Istnieje kilka przypadków w.NET Framework gdzie typ właściwości jest celowo wykonane, aby były nieswoiste modelu obiektów.Na przykład DataSource właściwość DataGridView klasy jest wpisana jako object.Ten projekt pozwala na źródła danych, aby zaakceptować kilka rodzajów danych wejściowych, ale zapewnia nie wspólnym miejscu w celu dodania metadanych do opisywania charakterystyk właściwość.Każda właściwość źródła danych w całym.NET Framework musi mieć identyczne metadanych dla typu konwertery i edytory typ interfejsu użytkownika.

AttributeProviderAttribute Klasy adresów w tej sytuacji.Gdy ten atrybut jest umieszczony na właściwości, zasady zmiany dla uzyskania atrybutów dla deskryptora właściwość Attributes kolekcji.Zazwyczaj deskryptora właściwości zbiera atrybutów lokalnych i łączy je z atrybutami z typu właściwości.Gdy AttributeProviderAttribute atrybut jest stosowany, atrybuty są pobierane z zwrócone przez AttributeProviderAttribute, a nie z typ właściwości rzeczywiste.AttributeProviderAttribute Jest używana na źródła danych do określonego typu źródła danych do pkt IListSource, oraz odpowiednich metadanych jest umieszczany na IListSource umożliwiające wiązania z danymi.Przekierowanie umożliwia podmiotom zewnętrznym, takim jak Visual Studio z łatwością dodać metadane do wszystkich źródeł danych.

Atrybuty uzyskane od typu zadeklarowane w AttributeProviderAttribute mają priorytet między atrybuty typu właściwości i atrybuty właściwości.Pełny zestaw atrybutów, które są dostępne jest połączenie w kolejności priorytetów, jak pokazano na poniższej liście:

  1. Atrybuty właściwości

  2. Atrybuty dostawcy atrybutu

  3. Atrybuty typu właściwości

Podstawianie docelowych i cieniowanie

Podstawianie docelowych występuje, gdy jeden obiekt stoi w innym.Wspólne stosowanie podstawiania docelowego jest w realizacji projektantów.

W.Projektant architektury NET Framework, składnik może mieć designer, skojarzony z nim.Można zaimplementować tego projektanta IDesignerFilter i podaj swoje właściwości.Te właściwości są scalane w właściwość składnika, z którą jest skojarzony projektanta.Te właściwości mogą być nowego składnika.Można również mają tę samą nazwę i typ jako właściwości już zdefiniowane w składniku.Gdy nowe właściwości udziałów, nazwę i typ jak istniejącej właściwości, jest nazywany przesłanianie, ponieważ projektant ukrywa, lub cienie, istniejące właściwości składnika.Na następującej ilustracji pokazano przesłanianie właściwości.

Właściwość cieniowania tekstu

W tym miejscu składnika oferuje dwie właściwości, a projektant oferuje także dwie właściwości.Text Właściwość jest oferowane na zarówno przez projektanta, jak i składnik i jest wykonywane kopie w tle.Wynik końcowy wywołanie do GetProperties jest trzy właściwości.Taka istnieje w składniku i dwóch innych istnieje na projektanta.

Filtrowanie tej właściwości jest realizowane za pośrednictwem ITypeDescriptorFilterService, która implementuje powierzchni projektu.TypeDescriptormożliwości są wymagane, gdy nadszedł czas, aby ustawić wartość właściwości.Kod, aby ustawić wartość na Grid właściwość będzie wyglądać następująco:

    gridProp.SetValue(component, value);

Rzeczywisty typ informacji o właściwości punkty to wystąpienie projektanta, nie składnika.Jeśli wywołanie refleksji dokonano faktycznie właociwooć, wywołanie wywołałoby wyjątek wywołania docelowej, ponieważ wystąpienie składnika nie jest zgodny z typem projektanta.

TypeDescriptor Klasa ma nieodłączne logiki do obejścia tej sytuacji.Po nawiązaniu połączenia właściwość TypeDescriptor sprawdza, jeśli typ członka jest instancją przekazanego obiektu klasy.Jeśli tak, umożliwia wywołanie kontynuować.Jeśli nie, klasa próbuje zlokalizować projektanta dla obiektu, i jeśli projektant można znaleźć, ma poprawny typ klasy zamienia instancji składnika projektanta instancji.

Następujące metody na TypeDescriptor obsługuje podstawianie docelowych:

Przedłużony okres pomocy technicznej typ deskryptora

GetExtendedTypeDescriptor Metoda zwraca deskryptor extended niestandardowego typu dla danego obiektu.Deskryptor typ rozszerzony jest deskryptora typ niestandardowy, który oferuje właściwości, które zostały dodane do tego obiektu inne obiekty, ale faktycznie nie są zdefiniowane w obiekcie.Na przykład w.NET Framework składnika modelu obiektów wdrożenie tego IExtenderProvider interfejsu można dołączyć właściwości do innych obiektów, które znajdują się w tym samym IContainer.GetTypeDescriptor Metoda nie zwraca deskryptora typu, który udostępnia te dodatkowe rozszerzone właściwości, ale GetExtendedTypeDescriptor zwraca zestaw tych właociwooci rozszerzonych.TypeDescriptor Klasy automatycznie scali wyniki tych dwóch właściwości kolekcji.

[!UWAGA]

Chociaż.NET Framework składnika modelu obsługuje tylko właściwości rozszerzone, GetExtendedTypeDescriptor może służyć do atrybutów rozszerzonych i zdarzenia, jak również, jeśli dostawca opisu typu obsługuje tę funkcję.

Zobacz też

Informacje

TypeDescriptor

TypeDescriptionProvider

TypeDescriptionProviderAttribute

ICustomTypeDescriptor

CustomTypeDescriptor

IContainer

IDesigner

Inne zasoby

Rozszerzona pomoc techniczna czasu projektowania