Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Kolekcje klas w przestrzeni nazw System.Reflection, razem z System.Type, umożliwiają uzyskanie informacji o załadowanych zestawach i typach w nich zdefiniowanych, takich jak klasy, interfejsy oraz typy wartości (to jest, struktury i wyliczenia). Można również użyć refleksji do tworzenia wystąpień typu w czasie wykonywania, a także do ich wywoływania i uzyskiwania do nich dostępu.
Zestawy zawierają moduły, moduły zawierają typy i typy zawierają elementy członkowskie. Refleksja dostarcza obiekty, które enkapsulują zestawy, moduły i typy. Można użyć odbicia, aby dynamicznie utworzyć wystąpienie typu, powiązać typ z istniejącym obiektem lub pobrać typ z istniejącego obiektu. Następnie można wywołać metody typu lub uzyskać dostęp do jego pól i właściwości. Typowe zastosowania odbicia obejmują następujące elementy:
- Użyj Assembly do definiowania i ładowania zestawów, ładowania modułów wymienionych w manifeście zespołu, oraz zlokalizowania typu w tym zespole i utworzenia jego instancji.
- Użyj Module do odkrywania informacji, takich jak zestaw zawierający moduł i klasy w module. Możesz również pobrać wszystkie metody globalne lub inne specyficzne, nieglobalne metody zdefiniowane w module.
- Użyj ConstructorInfo do odkrywania informacji, takich jak nazwa, parametry, modyfikatory dostępu (takie jak
publiclubprivate), oraz szczegóły implementacji (takie jakabstractlubvirtual) konstruktora. Użyj metody GetConstructors lub metody GetConstructor obiektu Type aby wywołać określonego konstruktora. - Służy MethodInfo do odnajdywania informacji, takich jak nazwa, typ zwracany, parametry, modyfikatory dostępu i szczegóły implementacji (takie jak
abstractlubvirtual) metody. Użyj metody GetMethods lub GetMethod w Type, aby wywołać określoną metodę. - Służy FieldInfo do odnajdywania informacji, takich jak nazwa, modyfikatory dostępu i szczegóły implementacji (takie jak
static) pola, oraz uzyskiwanie lub ustawianie wartości pól. - EventInfo jest używane do odkrywania informacji, takich jak nazwa, typ danych programu obsługi zdarzeń, atrybuty niestandardowe, typ deklarowania i odzwierciedlany typ zdarzenia, oraz dodawania lub usuwania procedur obsługi zdarzeń.
- Użyj PropertyInfo, aby uzyskać informacje, takie jak nazwa, typ danych, typ deklarujący, typ zwierciedlający oraz stan właściwości (tylko do odczytu lub zapisywalny), a także do pobierania lub ustawiania wartości właściwości.
- Służy ParameterInfo do odnajdywania informacji, takich jak nazwa parametru, typ danych, czy parametr jest parametrem wejściowym, czy wyjściowym, oraz położeniem parametru w podpisie metody.
- CustomAttributeData służy do odkrywania informacji o atrybutach niestandardowych podczas pracy w kontekście wyłącznie do odzwierciedlenia (MetadataLoadContext, .NET Framework). CustomAttributeData umożliwia analizowanie atrybutów bez tworzenia wystąpień.
Klasy przestrzeni nazw System.Reflection.Emit dostarczają wyspecjalizowaną formę refleksji, która umożliwia tworzenie typów w czasie wykonywania.
Odbicie może również służyć do tworzenia przeglądarek typów, które umożliwiają użytkownikom wybieranie typów, a następnie wyświetlanie informacji o tych typach.
Istnieją inne zastosowania refleksji. Kompilatory języków, takich jak JScript, używają odbicia do konstruowania tabel symboli. Klasy w System.Runtime.Serialization przestrzeni nazw używają odbicia, aby uzyskać dostęp do danych i określić, które pola mają być utrwalane. Klasy w przestrzeni nazw System.Runtime.Remoting używają odbicia pośrednio przez serializację.
Typy środowiska uruchomieniowego w odbiciu
Odbicie zapewnia klasy, takie jak Type i MethodInfo, do reprezentowania typów, składowych, parametrów i innych jednostek kodu. Jeśli jednak używasz odbicia, nie pracujesz bezpośrednio z tymi klasami, z których większość jest abstrakcyjna (MustInherit w Visual Basic). Zamiast tego pracujesz z typami udostępnianymi przez środowisko uruchomieniowe języka wspólnego (CLR).
Na przykład, gdy używasz operatora typeof języka C# (GetType w Visual Basic), aby uzyskać obiekt Type, obiekt jest w rzeczywistości RuntimeType.
RuntimeType pochodzi z Type i zapewnia implementacje wszystkich metod abstrakcyjnych.
Te klasy środowiska uruchomieniowego to internal (Friend w Visual Basic). Nie są one udokumentowane oddzielnie od klas bazowych, ponieważ ich zachowanie jest opisane w dokumentacji klasy bazowej.