Type.GetType Metoda

Definicja

Type Pobiera obiekt reprezentujący określony typ.

Przeciążenia

GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean)

Pobiera typ z określoną nazwą, określając, czy przeprowadzić wyszukiwanie uwzględniające wielkość liter i czy zgłosić wyjątek, jeśli typ nie zostanie znaleziony, i opcjonalnie podając niestandardowe metody rozpoznawania zestawu i typu.

GetType()

Pobiera bieżący element Type.

GetType(String)

Type Pobiera element o określonej nazwie, wykonując wyszukiwanie z uwzględnieniem wielkości liter.

GetType(String, Boolean)

Type Pobiera element o określonej nazwie, wykonując wyszukiwanie z uwzględnieniem wielkości liter i określając, czy zgłosić wyjątek, jeśli typ nie zostanie znaleziony.

GetType(String, Boolean, Boolean)

Pobiera element Type z określoną nazwą, określając, czy zgłosić wyjątek, jeśli typ nie zostanie znaleziony i czy ma być wykonywane wyszukiwanie w przypadku.

GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>)

Pobiera typ o określonej nazwie, opcjonalnie udostępniając metody niestandardowe do rozpoznawania zestawu i typu.

GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean)

Pobiera typ z określoną nazwą, określając, czy zgłosić wyjątek, jeśli typ nie zostanie znaleziony, i opcjonalnie podaj niestandardowe metody rozpoznawania zestawu i typu.

GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean)

Pobiera typ z określoną nazwą, określając, czy przeprowadzić wyszukiwanie uwzględniające wielkość liter i czy zgłosić wyjątek, jeśli typ nie zostanie znaleziony, i opcjonalnie podając niestandardowe metody rozpoznawania zestawu i typu.

public:
 static Type ^ GetType(System::String ^ typeName, Func<System::Reflection::AssemblyName ^, System::Reflection::Assembly ^> ^ assemblyResolver, Func<System::Reflection::Assembly ^, System::String ^, bool, Type ^> ^ typeResolver, bool throwOnError, bool ignoreCase);
public static Type? GetType (string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly?>? assemblyResolver, Func<System.Reflection.Assembly?,string,bool,Type?>? typeResolver, bool throwOnError, bool ignoreCase);
public static Type GetType (string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly> assemblyResolver, Func<System.Reflection.Assembly,string,bool,Type> typeResolver, bool throwOnError, bool ignoreCase);
static member GetType : string * Func<System.Reflection.AssemblyName, System.Reflection.Assembly> * Func<System.Reflection.Assembly, string, bool, Type> * bool * bool -> Type
Public Shared Function GetType (typeName As String, assemblyResolver As Func(Of AssemblyName, Assembly), typeResolver As Func(Of Assembly, String, Boolean, Type), throwOnError As Boolean, ignoreCase As Boolean) As Type

Parametry

typeName
String

Nazwa typu do pobrania. typeResolver Jeśli parametr jest podany, nazwa typu może być dowolnym ciągiem, który typeResolver może zostać rozpoznany. assemblyResolver Jeśli parametr jest podany lub jeśli jest używana rozdzielczość typu standardowego, typeName musi być kwalifikowaną nazwą zestawu (patrz AssemblyQualifiedName), chyba że typ znajduje się w aktualnie wykonywanym zestawie lub w mscorlib.dll/System.Private.CoreLib.dll, w którym przypadku wystarczy podać nazwę typu kwalifikowaną przez jego przestrzeń nazw.

assemblyResolver
Func<AssemblyName,Assembly>

Metoda, która lokalizuje i zwraca zestaw określony w elemecie typeName. Nazwa zestawu jest przekazywana jako assemblyResolverAssemblyName obiekt. Jeśli typeName nie zawiera nazwy zestawu, assemblyResolver nie jest wywoływana. Jeśli assemblyResolver nie podano, jest wykonywana standardowa rozdzielczość zestawu.

Uwaga: nie przekazuj metod nieznanych ani niezaufanych wywołujących. Może to spowodować podniesienie uprawnień dla złośliwego kodu. Użyj tylko określonych przez siebie metod lub tych, które znasz.

typeResolver
Func<Assembly,String,Boolean,Type>

Metoda, która lokalizuje i zwraca typ określony przez typeName zestaw zwracany przez assemblyResolver lub przez standardową rozdzielczość zestawu. Jeśli nie podano zestawu, metoda może go podać. Metoda przyjmuje również parametr określający, czy przeprowadzić wyszukiwanie bez uwzględniania wielkości liter; wartość jest przekazywana do tego parametru ignoreCase .

Uwaga: nie przekazuj metod nieznanych ani niezaufanych wywołujących.

throwOnError
Boolean

true zgłaszać wyjątek, jeśli nie można odnaleźć typu; false aby zwrócić nullwartość . Określenie false powoduje również pomijanie innych warunków wyjątku, ale nie wszystkich z nich. Zobacz sekcję Wyjątki.

ignoreCase
Boolean

trueaby wykonać wyszukiwanie bez uwzględniania wielkości liter dla typeNameelementu , false aby wykonać wyszukiwanie z uwzględnieniem wielkości liter.typeName

Zwraca

Typ o określonej nazwie. Jeśli typ nie zostanie znaleziony, parametr określa, throwOnError czy null jest zwracany, czy zgłaszany jest wyjątek. W niektórych przypadkach zgłaszany jest wyjątek niezależnie od wartości throwOnError. Zobacz sekcję Wyjątki.

Wyjątki

typeName to null.

Inicjator klasy jest wywoływany i zgłasza wyjątek.

throwOnError jest i true nie można odnaleźć typu.

-lub-

throwOnError jest true i typeName zawiera nieprawidłowe znaki, takie jak karta osadzona.

-lub-

throwOnErrortypeName jest ciągiem true pustym.

-lub-

throwOnError to true i typeName reprezentuje typ tablicy o nieprawidłowym rozmiarze.

-lub-

typeNamereprezentuje tablicę .TypedReference

Błąd występuje, gdy typeName jest analizowany w nazwie typu i nazwie zestawu (na przykład gdy prosta nazwa typu zawiera niewyrażony znak specjalny).

-lub-

throwOnError to true i typeName zawiera nieprawidłową składnię (na przykład "MyType[,*,]").

-lub-

typeName reprezentuje typ ogólny, który ma typ wskaźnika, ByRef typ lub Void jako jeden z argumentów typu.

-lub-

typeName reprezentuje typ ogólny, który ma nieprawidłową liczbę argumentów typu.

-lub-

typeName reprezentuje typ ogólny, a jeden z jego argumentów typu nie spełnia ograniczeń dla odpowiedniego parametru typu.

throwOnError nie true można odnaleźć zestawu lub jednego z jego zależności.

Zestaw lub jeden z jego elementów zależnych został znaleziony, ale nie można go załadować.

-lub-

typeName zawiera nieprawidłową nazwę zestawu.

-lub-

typeName jest prawidłową nazwą zestawu bez nazwy typu.

Zestaw lub jedna z jego zależności nie jest prawidłowym zestawem dla aktualnie załadowanego środowiska uruchomieniowego.

Uwagi

Aby uzyskać więcej informacji na temat tego interfejsu API, zobacz Uwagi dotyczące dodatkowego interfejsu API dla type.GetType.

Dotyczy

GetType()

Pobiera bieżący element Type.

public:
 Type ^ GetType();
public:
 virtual Type ^ GetType();
public Type GetType ();
override this.GetType : unit -> Type
Public Function GetType () As Type

Zwraca

Bieżąca klasa Type.

Implementuje

Wyjątki

Inicjator klasy jest wywoływany i zgłasza wyjątek.

Zobacz też

Dotyczy

GetType(String)

Pobiera element Type z określoną nazwą, wykonując wyszukiwanie uwzględniające wielkość liter.

public:
 static Type ^ GetType(System::String ^ typeName);
public static Type GetType (string typeName);
public static Type? GetType (string typeName);
static member GetType : string -> Type
Public Shared Function GetType (typeName As String) As Type

Parametry

typeName
String

Kwalifikowana nazwa zestawu typu do pobrania. Zobacz: . Jeśli typ znajduje się w aktualnie wykonywanym zestawie lub w mscorlib.dll/System.Private.CoreLib.dll, wystarczy podać nazwę typu kwalifikowaną przez jego przestrzeń nazw.

Zwraca

Typ o określonej nazwie, jeśli zostanie znaleziony; w przeciwnym razie , null.

Wyjątki

typeName to null.

Inicjator klasy jest wywoływany i zgłasza wyjątek.

typeName reprezentuje typ ogólny, który ma typ wskaźnika, ByRef typ lub Void jako jeden z argumentów typu.

-lub-

typeName reprezentuje typ ogólny, który ma nieprawidłową liczbę argumentów typu.

-lub-

typeName reprezentuje typ ogólny, a jeden z jego argumentów typu nie spełnia ograniczeń dla odpowiedniego parametru typu.

typeNamereprezentuje nieprawidłowy typ, na przykład tablicę .TypedReference

Zestaw lub jeden z jego elementów zależnych został znaleziony, ale nie można go załadować.

Uwaga: na platformie .NET dla aplikacji ze Sklepu Windows lub przenośnej biblioteki klas przechwyć wyjątek klasy bazowej , IOExceptionzamiast tego.

Zestaw jest nieprawidłowy dla aktualnie załadowanego środowiska uruchomieniowego.

Przykłady

Poniższy przykład pobiera typ System.Int32 obiektu i używa tego typu obiektu do wyświetlenia FullName właściwości System.Int32.

using namespace System;

int main()
{
   try {
      // Get the type of a specified class.
      Type^ myType1 = Type::GetType( "System.Int32" );
      Console::WriteLine( "The full name is {0}.\n", myType1->FullName );
   }
   catch ( TypeLoadException^ e ) {
       Console::WriteLine("{0}: Unable to load type System.Int32",
                          e->GetType()->Name);
   }

   try {
      // Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
      Type^ myType2 = Type::GetType( "NoneSuch", true );
      Console::WriteLine( "The full name is {0}.", myType2->FullName );
   }
   catch ( TypeLoadException^ e ) {
       Console::WriteLine("{0}: Unable to load type NoneSuch",
                          e->GetType()->Name);
   }

}
// The example displays the following output:
//       The full name is System.Int32.
//
//       TypeLoadException: Unable to load type NoneSuch
using System;

class Example
{
     public static void Main()
     {
         try {
             // Get the type of a specified class.
             Type myType1 = Type.GetType("System.Int32");
             Console.WriteLine("The full name is {0}.\n", myType1.FullName);
         }
         catch (TypeLoadException e)
         {
            Console.WriteLine("{0}: Unable to load type System.Int32", e.GetType().Name);
         }

         try {
             // Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
             Type myType2 = Type.GetType("NoneSuch", true);
             Console.WriteLine("The full name is {0}.", myType2.FullName);
         }
         catch(TypeLoadException e) {
            Console.WriteLine("{0}: Unable to load type NoneSuch", e.GetType().Name);
         }
     }
}
// The example displays the following output:
//       The full name is System.Int32.
//
//       TypeLoadException: Unable to load type NoneSuch
open System

try
    // Get the type of a specified class.
    let myType1 = Type.GetType "System.Int32"
    printfn $"The full name is {myType1.FullName}.\n"
with :? TypeLoadException as e ->
    printfn $"{e.GetType().Name}: Unable to load type System.Int32"

try
    // Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
    let myType2 = Type.GetType("NoneSuch", true)
    printfn $"The full name is {myType2.FullName}."
with :? TypeLoadException as e ->
    printfn $"{e.GetType().Name}: Unable to load type NoneSuch"
// The example displays the following output:
//       The full name is System.Int32.
//
//       TypeLoadException: Unable to load type NoneSuch
Class Example
     Public Shared Sub Main()
         Try
             ' Get the type of the specified class.
             Dim myType1 As Type = Type.GetType("System.Int32")
             Console.WriteLine("The full name is {0}.", myType1.FullName)
         Catch e As TypeLoadException
             Console.WriteLine("{0}: Unable to load type System.Int32",
                               e.GetType().Name)
         End Try

         Console.WriteLine()

         Try
             ' Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
             Dim myType2 As Type = Type.GetType("NoneSuch", True)
             Console.WriteLine("The full name is {0}.", myType2.FullName)
         Catch e As TypeLoadException
             Console.WriteLine("{0}: Unable to load type NoneSuch", e.GetType().Name)
         End Try
     End Sub
End Class
' The example displays the following output:
'       The full name is System.Int32.
'
'       TypeLoadException: Unable to load type NoneSuch

Uwagi

Możesz użyć GetType metody , aby uzyskać obiekt dla typu w innym zestawie, jeśli znasz jego kwalifikowaną Type nazwę zestawu, którą można uzyskać z AssemblyQualifiedName. GetType powoduje ładowanie zestawu określonego w typeNamepliku . Zestaw można również załadować przy użyciu Assembly.Load metody , a następnie użyć Assembly.GetType metody or Assembly.GetTypes , aby pobrać Type obiekty. Jeśli typ znajduje się w zestawie znanym programowi w czasie kompilacji, jest bardziej wydajny do użycia typeof w języku C# lub GetType operatora w Visual Basic.

Uwaga

Jeśli typeName nie można odnaleźć, wywołanie GetType(String) metody zwraca nullwartość . Nie zgłasza wyjątku. Aby kontrolować, czy zgłaszany jest wyjątek, wywołaj przeciążenie GetType metody, która ma throwOnError parametr.

GetType działa tylko w przypadku zestawów załadowanych z dysku. Jeśli wywołasz wywołanie GetType wyszukiwania typu zdefiniowanego w zestawie dynamicznym zdefiniowanym przy użyciu System.Reflection.Emit usług, może wystąpić niespójne zachowanie. Zachowanie zależy od tego, czy zestaw dynamiczny jest trwały, czyli tworzony przy użyciu RunAndSave trybów dostępu lub Save wyliczenia System.Reflection.Emit.AssemblyBuilderAccess . Jeśli zestaw dynamiczny jest trwały i został zapisany na dysku przed GetType wywołaniem, moduł ładujący znajdzie zapisany zestaw na dysku, ładuje ten zestaw i pobiera typ z tego zestawu. Jeśli zestaw nie został zapisany na dysku po GetType wywołaniu, metoda zwraca nullwartość . GetType nie rozumie przejściowych zestawów dynamicznych; Dlatego wywołanie metody GetType w celu pobrania typu w przejściowym zestawie dynamicznym zwraca wartość null.

Aby użyć go GetType w module dynamicznym, zasubskrybuj zdarzenie i wywołaj AppDomain.AssemblyResolveGetType je przed zapisaniem. W przeciwnym razie otrzymasz dwie kopie zestawu w pamięci.

W poniższej tabeli przedstawiono, które elementy członkowskie klasy bazowej są zwracane przez Get metody podczas odzwierciedlania typu.

Typ elementu członkowskiego Static Niestatyczna
Konstruktor Nie Nie
Pole Nie Tak. Pole jest zawsze ukryte przez nazwę i podpis.
Zdarzenie Nie dotyczy Zasadą systemu typu jest to, że dziedziczenie jest takie samo, jak w przypadku metod, które implementują właściwość. Odbicie traktuje właściwości jako ukryte przez nazwę i podpis. Patrz Uwaga 2 poniżej.
Metoda Nie Tak. Metodą (zarówno wirtualną, jak i niewirtualną) może być ukrycie przez nazwę lub przez nazwę i podpis.
Typu zagnieżdżony Nie Nie
Właściwość Nie dotyczy Zasadą systemu typu jest to, że dziedziczenie jest takie samo, jak w przypadku metod, które implementują właściwość. Odbicie traktuje właściwości jako ukryte przez nazwę i podpis. Patrz Uwaga 2 poniżej.
  1. Ukrycie przez nazwę i podpis dotyczy wszystkich części podpisu, w tym modyfikatorów niestandardowych, zwraca typy, typy parametrów, wartowników i niezarządzane konwencje wywoływania. To jest porównanie binarne.

  2. W celu odbicia właściwości i zdarzenia są ukrywane przez nazwę i podpis. Jeśli istnieje właściwość z akcesorem pobierania i ustawiania w klasie bazowej, ale odziedziczona klasa ma tylko akcesor pobierania, właściwość klasy odziedziczonej ukrywa właściwości klasy bazowej, a nie można uzyskać dostępu do metody ustawiającej w klasie bazowej.

  3. Atrybuty niestandardowe nie są częścią wspólnego typu systemowego.

Tablice lub typy COM nie są wyszukiwane, chyba że zostały już załadowane do tabeli dostępnych klas.

typeName może być nazwą typu kwalifikowaną przez przestrzeń nazw lub kwalifikowaną przez zestaw nazwę, która zawiera specyfikację nazwy zestawu. Zobacz: .

Jeśli typeName zawiera przestrzeń nazw, ale nie nazwę zestawu, ta metoda wyszukuje tylko zestaw obiektu wywołującego i mscorlib.dll/System.Private.CoreLib.dll w tej kolejności. Jeśli typeName jest w pełni kwalifikowana z częściową lub kompletną nazwą zestawu, ta metoda wyszukuje w określonym zestawie. Jeśli zestaw ma silną nazwę, wymagana jest pełna nazwa zestawu.

Właściwość AssemblyQualifiedName zwraca w pełni kwalifikowaną nazwę typu, w tym typy zagnieżdżone, nazwę zestawu i argumenty typu ogólnego. Wszystkie kompilatory, które obsługują aparat plików wykonywalnych języka wspólnego, w trakcie wykonania wyemitują prostą nazwę klasy zagnieżdżonej, a odbicie podczas kwerendy stworzy zniekształcone nazwy zgodnie z następującymi konwencjami.

Uwaga

Architektura procesora jest częścią tożsamości zestawu i może być określona jako część ciągów nazw zestawów. Na przykład "ProcessorArchitecture = msil". Jednak nie jest uwzględniany w ciągu zwracanym przez AssemblyQualifiedName właściwość ze względów zgodności. Można również załadować typy, tworząc AssemblyName obiekt i przekazując go do odpowiedniego przeciążenia Load metody. Następnie można użyć Assembly.GetType metody , aby załadować typy z zestawu. Zobacz też AssemblyName.ProcessorArchitecture.

Ogranicznik Znaczenie
Ukośnik odwrotny (\) Znak ucieczki.
Backtick (') Poprzedza co najmniej jedną cyfrę reprezentującą liczbę parametrów typu znajdujących się na końcu nazwy typu ogólnego.
Nawiasy kwadratowe ([]) Ujmij listę argumentów typu ogólnego dla skonstruowanego typu ogólnego; w obrębie listy argumentów typu należy ująć typ kwalifikowany przez zestaw.
Przecinek (,) Poprzedza nazwę zestawu.
Kropka (.) Wskazuje przestrzeń nazw identyfikatorów.
Znak plus (+) Poprzedza klasę zagnieżdżoną.

Na przykład w pełni kwalifikowana nazwa klasy może wyglądać następująco:

TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly

Jeśli przestrzeń nazw to TopNamespace.Sub+Przestrzeń nazw, ciąg musi poprzedzić znak plus (+) znakiem ucieczki (\), aby zapobiec interpretowaniu go jako separatora zagnieżdżenia. Odbicie emituje ten ciąg w następujący sposób:

TopNamespace.Sub\+Namespace.ContainingClass+NestedClass,MyAssembly

Znak "++" staje się "\+\+", a znak "\" staje się "\\".

Tę kwalifikowaną nazwę można utrwalić i później użyć do załadowania elementu Type. Aby wyszukać i załadować element Type, użyj metody GetType tylko z nazwą typu lub nazwą kwalifikowanego typu zestawu. GetType z nazwą typu będzie szukać Type tylko w zestawie obiektu wywołującego, a następnie w zestawie systemowym. GetType z kwalifikowaną nazwą typu zestawu będzie szukać Type w dowolnym zestawie.

Nazwy typów mogą obejmować końcowe znaki, które wyznaczają dodatkowe informacje dotyczące typu, na przykład to, czy typ jest typem odwołania, typem wskaźnika lub typem tablicowym. Aby pobrać nazwę typu bez tych końcowych znaków, użyj , t.GetElementType().ToString()gdzie t jest typem.

Spacje są istotne we wszystkich składnikach nazwy z wyjątkiem nazwy zestawu. Spacje przed separatorem w nazwie zestawu ',' są istotne, ale spacje po separatorze ',' są ignorowane.

Nazwa typu ogólnego kończy się znakiem backtick ('), po którym następują cyfry reprezentujące liczbę argumentów typu ogólnego. Celem tej nazwy jest umożliwienie kompilatorom obsługi typów ogólnych o tej samej nazwie, ale z różnymi liczbami parametrów typu występującymi w tym samym zakresie. Na przykład odbicie zwraca nazwy Tuple`1 mangled i Tuple`2 z metod Tuple(Of T) ogólnych oraz Tuple(Of T0, T1) w Visual Basic lub Tuple<T>Tuple<T0, T1> w Visual C#.

W przypadku typów ogólnych lista argumentów typu jest ujęta w nawiasy, a argumenty typu są rozdzielane przecinkami. Na przykład rodzaj Dictionary<TKey,TValue> ma dwa parametry typu. MyType Element Dictionary<TKey,TValue> z kluczami typu String może być reprezentowany w następujący sposób:

System.Collections.Generic.Dictionary`2[System.String,MyType]

Aby określić typ kwalifikowany przez zestaw w obrębie listy argumentów typu, należy ująć typ kwalifikowany przez zestaw w nawiasy kwadratowe. W przeciwnym razie przecinki oddzielające części nazwy kwalifikowanej przez zestaw są interpretowane jako rozdzielanie argumentów dodatkowych typów. Na przykład fromMyAssembly.dll Dictionary<TKey,TValue>MyType z kluczami typu Stringmożna określić w następujący sposób:

Type.GetType("System.Collections.Generic.Dictionary`2[System.String,[MyType,MyAssembly]]")

Uwaga

Kwalifikowany typ zestawu może być ujęta w nawiasy tylko wtedy, gdy pojawia się na liście parametrów typu. Reguły wyszukiwania zestawów dla kwalifikowanych i niekwalifikowanych typów na listach parametrów typu są takie same jak reguły dla kwalifikowanych i niekwalifikowanych typów niegenerowanych.

Typy dopuszczane do wartości null to specjalny przypadek typów ogólnych. Na przykład wartość null jest Int32 reprezentowana przez ciąg "System.Nullable'1[System.Int32]".

Uwaga

W językach C#, C++i Visual Basic można również uzyskać typy dopuszczane do wartości null przy użyciu operatorów typów. Na przykład typ dopuszczający Boolean wartość null jest zwracany przez typeof(Nullable<bool>) element w języku C#, w Nullable<Boolean>::typeid języku C++, a w GetType(Nullable(Of Boolean)) języku Visual Basic.

W poniższej tabeli przedstawiono składnię używaną dla GetType różnych typów.

Aby uzyskać Zastosowanie
Dopuszczanie wartości null Int32 Type.GetType("System.Nullable`1[System.Int32]")
Niezarządzany wskaźnik do MyType Type.GetType("MyType*")
Niezarządzany wskaźnik do wskaźnika do MyType Type.GetType("MyType**")
Zarządzany wskaźnik lub odwołanie do MyType Type.GetType("MyType&"). Należy pamiętać, że w przeciwieństwie do wskaźników odwołania są ograniczone do jednego poziomu.
Klasa nadrzędna i zagnieżdżona klasa Type.GetType("MyParentClass+MyNestedClass")
Jednowymiarowa tablica z dolną granicą 0 Type.GetType("MyType[]")
Jednowymiarowa tablica z nieznaną dolną granicą Type.GetType("MyType[*]")
Tablica nwymiarowa Przecinek (,) wewnątrz nawiasów łącznie n-1 razy. Na przykład System.Object[,,] reprezentuje tablicę trójwymiarową Object .
Tablica tablic jednowymiarowych Type.GetType("MyType[][]")
Prostokątna tablica dwuwymiarowa z nieznanymi dolną granicą Type.GetType("MyType[,]")
Typ ogólny z jednym argumentem typu Type.GetType("MyGenericType`1[MyType]")
Typ ogólny z dwoma argumentami typu Type.GetType("MyGenericType`2[MyType,AnotherType]")
Typ ogólny z dwoma argumentami typu kwalifikowanego zestawu Type.GetType("MyGenericType`2[[MyType,MyAssembly],[AnotherType,AnotherAssembly]]")
Typ ogólny kwalifikowany do zestawu z argumentem typu kwalifikowanego przez zestaw Type.GetType("MyGenericType`1[[MyType,MyAssembly]],MyGenericTypeAssembly")
Typ ogólny, którego argument typu jest typem ogólnym z dwoma argumentami typu Type.GetType("MyGenericType`1[AnotherGenericType`2[MyType,AnotherType]]")

Zobacz też

Dotyczy

GetType(String, Boolean)

Pobiera element Type z określoną nazwą, wykonując wyszukiwanie uwzględniające wielkość liter i określając, czy zgłosić wyjątek, jeśli typ nie zostanie znaleziony.

public:
 static Type ^ GetType(System::String ^ typeName, bool throwOnError);
public static Type GetType (string typeName, bool throwOnError);
public static Type? GetType (string typeName, bool throwOnError);
static member GetType : string * bool -> Type
Public Shared Function GetType (typeName As String, throwOnError As Boolean) As Type

Parametry

typeName
String

Nazwa kwalifikowana zestawu typu do pobrania. Zobacz: . Jeśli typ znajduje się w aktualnie wykonywanym zestawie lub w mscorlib.dll/System.Private.CoreLib.dll, wystarczy podać nazwę typu kwalifikowaną przez jego przestrzeń nazw.

throwOnError
Boolean

true zgłosić wyjątek, jeśli nie można odnaleźć typu; false , aby zwrócić wartość null. Określenie false powoduje również pominięcie niektórych innych warunków wyjątku, ale nie wszystkich z nich. Zobacz sekcję Wyjątki.

Zwraca

Typ o określonej nazwie. Jeśli typ nie zostanie znaleziony, parametr określa, czy null jest zwracany, throwOnError czy zgłaszany jest wyjątek. W niektórych przypadkach wyjątek jest zgłaszany niezależnie od wartości throwOnError. Zobacz sekcję Wyjątki.

Wyjątki

typeName to null.

Inicjator klasy jest wywoływany i zgłasza wyjątek.

throwOnError jest true i nie można odnaleźć typu.

-lub-

throwOnError jest true i typeName zawiera nieprawidłowe znaki, takie jak karta osadzona.

-lub-

throwOnError to true i typeName jest pustym ciągiem.

-lub-

throwOnError to true i typeName reprezentuje typ tablicy o nieprawidłowym rozmiarze.

-lub-

typeNamereprezentuje tablicę .TypedReference

throwOnError jest true i typeName zawiera nieprawidłową składnię. Na przykład "MyType[,*,]".

-lub-

typeName reprezentuje typ ogólny, który ma typ wskaźnika, ByRef typ lub Void jako jeden z argumentów typu.

-lub-

typeName reprezentuje typ ogólny, który ma niepoprawną liczbę argumentów typu.

-lub-

typeName reprezentuje typ ogólny, a jeden z argumentów typu nie spełnia ograniczeń dla odpowiedniego parametru typu.

throwOnError jest true i zestaw lub jeden z jego zależności nie został znaleziony.

Zestaw lub jeden z jego elementów zależnych został znaleziony, ale nie można go załadować.

Uwaga: na platformie .NET dla aplikacji ze Sklepu Windows lub biblioteki klas przenośnych przechwyć wyjątek klasy bazowej , IOExceptionzamiast tego.

Zestaw lub jedna z jego zależności jest nieprawidłowa dla aktualnie załadowanego środowiska uruchomieniowego.

Przykłady

Poniższy przykład pobiera typ System.Int32 obiektu i używa tego typu obiektu do wyświetlenia FullName właściwości System.Int32. Jeśli obiekt typu odwołuje się do zestawu, który nie istnieje, ten przykład zgłasza wyjątek.

using namespace System;

int main()
{
   try {
      // Get the type of a specified class.
      Type^ myType1 = Type::GetType( "System.Int32" );
      Console::WriteLine( "The full name is {0}.\n", myType1->FullName );
   }
   catch ( TypeLoadException^ e ) {
       Console::WriteLine("{0}: Unable to load type System.Int32",
                          e->GetType()->Name);
   }

   try {
      // Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
      Type^ myType2 = Type::GetType( "NoneSuch", true );
      Console::WriteLine( "The full name is {0}.", myType2->FullName );
   }
   catch ( TypeLoadException^ e ) {
       Console::WriteLine("{0}: Unable to load type NoneSuch",
                          e->GetType()->Name);
   }

}
// The example displays the following output:
//       The full name is System.Int32.
//
//       TypeLoadException: Unable to load type NoneSuch
using System;

class Example
{
     public static void Main()
     {
         try {
             // Get the type of a specified class.
             Type myType1 = Type.GetType("System.Int32");
             Console.WriteLine("The full name is {0}.\n", myType1.FullName);
         }
         catch (TypeLoadException e)
         {
            Console.WriteLine("{0}: Unable to load type System.Int32", e.GetType().Name);
         }

         try {
             // Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
             Type myType2 = Type.GetType("NoneSuch", true);
             Console.WriteLine("The full name is {0}.", myType2.FullName);
         }
         catch(TypeLoadException e) {
            Console.WriteLine("{0}: Unable to load type NoneSuch", e.GetType().Name);
         }
     }
}
// The example displays the following output:
//       The full name is System.Int32.
//
//       TypeLoadException: Unable to load type NoneSuch
open System

try
    // Get the type of a specified class.
    let myType1 = Type.GetType "System.Int32"
    printfn $"The full name is {myType1.FullName}.\n"
with :? TypeLoadException as e ->
    printfn $"{e.GetType().Name}: Unable to load type System.Int32"

try
    // Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
    let myType2 = Type.GetType("NoneSuch", true)
    printfn $"The full name is {myType2.FullName}."
with :? TypeLoadException as e ->
    printfn $"{e.GetType().Name}: Unable to load type NoneSuch"
// The example displays the following output:
//       The full name is System.Int32.
//
//       TypeLoadException: Unable to load type NoneSuch
Class Example
     Public Shared Sub Main()
         Try
             ' Get the type of the specified class.
             Dim myType1 As Type = Type.GetType("System.Int32")
             Console.WriteLine("The full name is {0}.", myType1.FullName)
         Catch e As TypeLoadException
             Console.WriteLine("{0}: Unable to load type System.Int32",
                               e.GetType().Name)
         End Try

         Console.WriteLine()

         Try
             ' Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
             Dim myType2 As Type = Type.GetType("NoneSuch", True)
             Console.WriteLine("The full name is {0}.", myType2.FullName)
         Catch e As TypeLoadException
             Console.WriteLine("{0}: Unable to load type NoneSuch", e.GetType().Name)
         End Try
     End Sub
End Class
' The example displays the following output:
'       The full name is System.Int32.
'
'       TypeLoadException: Unable to load type NoneSuch

Uwagi

Można użyć GetType metody , aby uzyskać Type obiekt dla typu w innym zestawie, jeśli znasz jego nazwę kwalifikowaną do zestawu, którą można uzyskać z AssemblyQualifiedName. GetType powoduje ładowanie zestawu określonego w pliku typeName. Zestaw można również załadować przy użyciu Assembly.Load metody , a następnie użyć Assembly.GetType metody or Assembly.GetTypes w celu pobrania Type obiektów. Jeśli typ znajduje się w zestawie znanym programowi w czasie kompilacji, bardziej wydajne jest użycie typeof w języku C# lub GetType operatora w języku Visual Basic.

GetType Działa tylko na zestawach załadowanych z dysku. Jeśli wywołasz GetType metodę wyszukiwania typu zdefiniowanego w zestawie dynamicznym zdefiniowanym przy użyciu System.Reflection.Emit usług, zachowanie może być niespójne. Zachowanie zależy od tego, czy zestaw dynamiczny jest trwały, czyli tworzony przy użyciu RunAndSave trybów System.Reflection.Emit.AssemblyBuilderAccess dostępu lub Save wyliczenia. Jeśli zestaw dynamiczny jest trwały i został zapisany na dysku przed GetType wywołaniem, moduł ładujący znajdzie zapisany zestaw na dysku, ładuje ten zestaw i pobiera typ z tego zestawu. Jeśli zestaw nie został zapisany na dysku po GetType wywołaniu, metoda zwraca wartość null. GetType nie rozumie przejściowych zestawów dynamicznych; Dlatego wywołanie metody GetType w celu pobrania typu w przejściowym zestawie dynamicznym zwraca wartość null.

Aby użyć go GetType w module dynamicznym, zasubskrybuj zdarzenie i wywołaj AppDomain.AssemblyResolveGetType je przed zapisaniem. W przeciwnym razie otrzymasz dwie kopie zestawu w pamięci.

Parametr throwOnError określa, co się stanie, gdy typ nie zostanie znaleziony, a także pomija niektóre inne warunki wyjątku, zgodnie z opisem w sekcji Wyjątki. Niektóre wyjątki są zgłaszane niezależnie od wartości throwOnError. Jeśli na przykład typ zostanie znaleziony, ale nie można go załadować, TypeLoadException zostanie zgłoszony, nawet jeśli throwOnError ma wartość false.

W poniższej tabeli przedstawiono, które elementy członkowskie klasy bazowej są zwracane przez Get metody podczas odzwierciedlania typu.

Typ elementu członkowskiego Static Niestatyczna
Konstruktor Nie Nie
Pole Nie Tak. Pole jest zawsze ukryte przez nazwę i podpis.
Zdarzenie Nie dotyczy Zasadą systemu typu jest to, że dziedziczenie jest takie samo, jak w przypadku metod, które implementują właściwość. Odbicie traktuje właściwości jako ukryte przez nazwę i podpis. Patrz Uwaga 2 poniżej.
Metoda Nie Tak. Metodą (zarówno wirtualną, jak i niewirtualną) może być ukrycie przez nazwę lub przez nazwę i podpis.
Typu zagnieżdżony Nie Nie
Właściwość Nie dotyczy Zasadą systemu typu jest to, że dziedziczenie jest takie samo, jak w przypadku metod, które implementują właściwość. Odbicie traktuje właściwości jako ukryte przez nazwę i podpis. Patrz Uwaga 2 poniżej.
  1. Ukrycie przez nazwę i podpis dotyczy wszystkich części podpisu, w tym modyfikatorów niestandardowych, zwraca typy, typy parametrów, wartowników i niezarządzane konwencje wywoływania. To jest porównanie binarne.

  2. W celu odbicia właściwości i zdarzenia są ukrywane przez nazwę i podpis. Jeśli istnieje właściwość z akcesorem pobierania i ustawiania w klasie bazowej, ale odziedziczona klasa ma tylko akcesor pobierania, właściwość klasy odziedziczonej ukrywa właściwości klasy bazowej, a nie można uzyskać dostępu do metody ustawiającej w klasie bazowej.

  3. Atrybuty niestandardowe nie są częścią wspólnego typu systemowego.

Tablice lub typy COM nie są wyszukiwane, chyba że zostały już załadowane do tabeli dostępnych klas.

typeName może być nazwą typu kwalifikowaną przez przestrzeń nazw lub kwalifikowaną przez zestaw nazwę, która zawiera specyfikację nazwy zestawu. Zobacz: .

Jeśli typeName zawiera przestrzeń nazw, ale nie nazwę zestawu, ta metoda wyszukuje tylko zestaw obiektu wywołującego i mscorlib.dll/System.Private.CoreLib.dll w tej kolejności. Jeśli typeName jest w pełni kwalifikowana z częściową lub kompletną nazwą zestawu, ta metoda wyszukuje w określonym zestawie. Jeśli zestaw ma silną nazwę, wymagana jest pełna nazwa zestawu.

Właściwość AssemblyQualifiedName zwraca w pełni kwalifikowaną nazwę typu, w tym typy zagnieżdżone, nazwę zestawu i argumenty ogólne. Wszystkie kompilatory, które obsługują aparat plików wykonywalnych języka wspólnego, w trakcie wykonania wyemitują prostą nazwę klasy zagnieżdżonej, a odbicie podczas kwerendy stworzy zniekształcone nazwy zgodnie z następującymi konwencjami.

Uwaga

Architektura procesora jest częścią tożsamości zestawu i może być określona jako część ciągów nazw zestawów. Na przykład "ProcessorArchitecture = msil". Jednak nie jest uwzględniany w ciągu zwracanym przez AssemblyQualifiedName właściwość ze względów zgodności. Można również załadować typy, tworząc AssemblyName obiekt i przekazując go do odpowiedniego przeciążenia Load metody. Następnie można użyć Assembly.GetType metody , aby załadować typy z zestawu. Zobacz też AssemblyName.ProcessorArchitecture.

Ogranicznik Znaczenie
Ukośnik odwrotny (\) Znak ucieczki.
Backtick (') Poprzedza co najmniej jedną cyfrę reprezentującą liczbę parametrów typu znajdujących się na końcu nazwy typu ogólnego.
Nawiasy kwadratowe ([]) Ujmij listę argumentów typu ogólnego dla skonstruowanego typu ogólnego; w obrębie listy argumentów typu należy ująć typ kwalifikowany przez zestaw.
Przecinek (,) Poprzedza nazwę zestawu.
Kropka (.) Wskazuje przestrzeń nazw identyfikatorów.
Znak plus (+) Poprzedza klasę zagnieżdżoną.

Na przykład w pełni kwalifikowana nazwa klasy może wyglądać następująco:

TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly

Jeśli przestrzeń nazw to TopNamespace.Sub+Przestrzeń nazw, ciąg musi poprzedzić znak plus (+) znakiem ucieczki (\), aby zapobiec interpretowaniu go jako separatora zagnieżdżenia. Odbicie emituje ten ciąg w następujący sposób:

TopNamespace.Sub\+Namespace.ContainingClass+NestedClass,MyAssembly

Znak "++" staje się "\+\+", a znak "\" staje się "\\".

Tę kwalifikowaną nazwę można utrwalić i później użyć do załadowania elementu Type. Aby wyszukać i załadować element Type, użyj metody GetType tylko z nazwą typu lub nazwą kwalifikowanego typu zestawu. GetType z nazwą typu będzie szukać Type tylko w zestawie obiektu wywołującego, a następnie w zestawie systemowym. GetType z kwalifikowaną nazwą typu zestawu będzie szukać Type w dowolnym zestawie.

Nazwy typów mogą obejmować końcowe znaki, które wyznaczają dodatkowe informacje dotyczące typu, na przykład to, czy typ jest typem odwołania, typem wskaźnika lub typem tablicowym. Aby pobrać nazwę typu bez tych końcowych znaków, użyj , t.GetElementType().ToString()gdzie t jest typem.

Spacje są istotne we wszystkich składnikach nazwy z wyjątkiem nazwy zestawu. Spacje przed separatorem w nazwie zestawu ',' są istotne, ale spacje po separatorze ',' są ignorowane.

Nazwa typu ogólnego kończy się znakiem backtick ('), po którym następują cyfry reprezentujące liczbę argumentów typu ogólnego. Celem tej nazwy jest umożliwienie kompilatorom obsługi typów ogólnych o tej samej nazwie, ale z różnymi liczbami parametrów typu występującymi w tym samym zakresie. Na przykład odbicie zwraca nazwy Tuple`1 mangled i Tuple`2 z metod Tuple(Of T) ogólnych oraz Tuple(Of T0, T1) w Visual Basic lub Tuple<T>Tuple<T0, T1> w Visual C#.

W przypadku typów ogólnych lista argumentów typu jest ujęta w nawiasy, a argumenty typu są rozdzielane przecinkami. Na przykład rodzaj Dictionary<TKey,TValue> ma dwa parametry typu. MyType Element Dictionary<TKey,TValue> z kluczami typu String może być reprezentowany w następujący sposób:

System.Collections.Generic.Dictionary`2[System.String,MyType]

Aby określić typ kwalifikowany przez zestaw w obrębie listy argumentów typu, należy ująć typ kwalifikowany przez zestaw w nawiasy kwadratowe. W przeciwnym razie przecinki oddzielające części nazwy kwalifikowanej przez zestaw są interpretowane jako rozdzielanie argumentów dodatkowych typów. Na przykład element Dictionary<TKey,TValue> z MyType MyAssembly.dll z kluczami typu Stringmoże być określony w następujący sposób:

Type.GetType("System.Collections.Generic.Dictionary`2[System.String,[MyType,MyAssembly]]")

Uwaga

Kwalifikowany typ zestawu może być ujęta w nawiasy tylko wtedy, gdy pojawia się na liście parametrów typu. Reguły wyszukiwania zestawów dla kwalifikowanych i niekwalifikowanych typów na listach parametrów typu są takie same jak reguły dla kwalifikowanych i niekwalifikowanych typów niegenerowanych.

Typy dopuszczane do wartości null to specjalny przypadek typów ogólnych. Na przykład wartość null jest Int32 reprezentowana przez ciąg "System.Nullable'1[System.Int32]".

Uwaga

W językach C#, C++i Visual Basic można również uzyskać typy dopuszczane do wartości null przy użyciu operatorów typów. Na przykład typ dopuszczający Boolean wartość null jest zwracany przez typeof(Nullable<bool>) element w języku C#, w Nullable<Boolean>::typeid języku C++, a w GetType(Nullable(Of Boolean)) języku Visual Basic.

W poniższej tabeli przedstawiono składnię używaną dla GetType różnych typów.

Aby uzyskać Zastosowanie
Dopuszczanie wartości null Int32 Type.GetType("System.Nullable`1[System.Int32]")
Niezarządzany wskaźnik do MyType Type.GetType("MyType*")
Niezarządzany wskaźnik do wskaźnika do MyType Type.GetType("MyType**")
Zarządzany wskaźnik lub odwołanie do MyType Type.GetType("MyType&"). Należy pamiętać, że w przeciwieństwie do wskaźników odwołania są ograniczone do jednego poziomu.
Klasa nadrzędna i zagnieżdżona klasa Type.GetType("MyParentClass+MyNestedClass")
Jednowymiarowa tablica z dolną granicą 0 Type.GetType("MyArray[]")
Jednowymiarowa tablica z nieznaną dolną granicą Type.GetType("MyArray[*]")
Tablica nwymiarowa Przecinek (,) wewnątrz nawiasów łącznie n-1 razy. Na przykład System.Object[,,] reprezentuje tablicę trójwymiarową Object .
Tablica dwuwymiarowa Type.GetType("MyArray[][]")
Prostokątna tablica dwuwymiarowa z nieznanymi dolną granicą Type.GetType("MyArray[,]")
Typ ogólny z jednym argumentem typu Type.GetType("MyGenericType`1[MyType]")
Typ ogólny z dwoma argumentami typu Type.GetType("MyGenericType`2[MyType,AnotherType]")
Typ ogólny z dwoma argumentami typu kwalifikowanego zestawu Type.GetType("MyGenericType`2[[MyType,MyAssembly],[AnotherType,AnotherAssembly]]")
Typ ogólny kwalifikowany do zestawu z argumentem typu kwalifikowanego przez zestaw Type.GetType("MyGenericType`1[[MyType,MyAssembly]],MyGenericTypeAssembly")
Typ ogólny, którego argument typu jest typem ogólnym z dwoma argumentami typu Type.GetType("MyGenericType`1[AnotherGenericType`2[MyType,AnotherType]]")

Zobacz też

Dotyczy

GetType(String, Boolean, Boolean)

Pobiera element Type z określoną nazwą, określając, czy zgłosić wyjątek, jeśli typ nie zostanie znaleziony i czy ma być wykonywane wyszukiwanie w przypadku.

public:
 static Type ^ GetType(System::String ^ typeName, bool throwOnError, bool ignoreCase);
public static Type GetType (string typeName, bool throwOnError, bool ignoreCase);
public static Type? GetType (string typeName, bool throwOnError, bool ignoreCase);
static member GetType : string * bool * bool -> Type
Public Shared Function GetType (typeName As String, throwOnError As Boolean, ignoreCase As Boolean) As Type

Parametry

typeName
String

Nazwa kwalifikowana zestawu typu do pobrania. Zobacz: . Jeśli typ znajduje się w aktualnie wykonywanym zestawie lub w mscorlib.dll/System.Private.CoreLib.dll, wystarczy podać nazwę typu kwalifikowaną przez jego przestrzeń nazw.

throwOnError
Boolean

true zgłosić wyjątek, jeśli nie można odnaleźć typu; false , aby zwrócić wartość null. Określenie false powoduje również pominięcie niektórych innych warunków wyjątku, ale nie wszystkich z nich. Zobacz sekcję Wyjątki.

ignoreCase
Boolean

trueaby wykonać wyszukiwanie typeNamebez uwzględniania wielkości liter dla elementu , false aby przeprowadzić wyszukiwanie z uwzględnieniem wielkości liter.typeName

Zwraca

Typ o określonej nazwie. Jeśli typ nie zostanie znaleziony, parametr określa, throwOnError czy null jest zwracany, czy zgłaszany jest wyjątek. W niektórych przypadkach zgłaszany jest wyjątek niezależnie od wartości throwOnError. Zobacz sekcję Wyjątki.

Wyjątki

typeName to null.

Inicjator klasy jest wywoływany i zgłasza wyjątek.

throwOnError jest true i nie można odnaleźć typu.

-lub-

throwOnError jest true i typeName zawiera nieprawidłowe znaki, takie jak karta osadzona.

-lub-

throwOnError to true i typeName jest pustym ciągiem.

-lub-

throwOnError to true i typeName reprezentuje typ tablicy o nieprawidłowym rozmiarze.

-lub-

typeNamereprezentuje tablicę .TypedReference

throwOnError jest true i typeName zawiera nieprawidłową składnię. Na przykład "MyType[,*,]".

-lub-

typeName reprezentuje typ ogólny, który ma typ wskaźnika, ByRef typ lub Void jako jeden z argumentów typu.

-lub-

typeName reprezentuje typ ogólny, który ma niepoprawną liczbę argumentów typu.

-lub-

typeName reprezentuje typ ogólny, a jeden z argumentów typu nie spełnia ograniczeń dla odpowiedniego parametru typu.

throwOnError jest true i zestaw lub jeden z jego zależności nie został znaleziony.

Zestaw lub jeden z jego elementów zależnych został znaleziony, ale nie można go załadować.

Zestaw jest nieprawidłowy dla aktualnie załadowanego środowiska uruchomieniowego.

Uwagi

Można użyć GetType metody , aby uzyskać Type obiekt dla typu w innym zestawie, jeśli znasz jego nazwę kwalifikowaną do zestawu, którą można uzyskać z AssemblyQualifiedName. GetType powoduje ładowanie zestawu określonego w pliku typeName. Zestaw można również załadować przy użyciu Assembly.Load metody , a następnie użyć Assembly.GetType metody or Assembly.GetTypes w celu pobrania Type obiektów. Jeśli typ znajduje się w zestawie znanym programowi w czasie kompilacji, bardziej wydajne jest użycie typeof w języku C# lub GetType operatora w języku Visual Basic.

GetType Działa tylko na zestawach załadowanych z dysku. Jeśli wywołasz GetType metodę wyszukiwania typu zdefiniowanego w zestawie dynamicznym zdefiniowanym przy użyciu System.Reflection.Emit usług, zachowanie może być niespójne. Zachowanie zależy od tego, czy zestaw dynamiczny jest trwały, czyli tworzony przy użyciu RunAndSave trybów System.Reflection.Emit.AssemblyBuilderAccess dostępu lub Save wyliczenia. Jeśli zestaw dynamiczny jest trwały i został zapisany na dysku przed GetType wywołaniem, moduł ładujący znajdzie zapisany zestaw na dysku, ładuje ten zestaw i pobiera typ z tego zestawu. Jeśli zestaw nie został zapisany na dysku po GetType wywołaniu, metoda zwraca wartość null. GetType nie rozumie przejściowych zestawów dynamicznych; Dlatego wywołanie metody GetType w celu pobrania typu w przejściowym zestawie dynamicznym zwraca wartość null.

Aby użyć go GetType w module dynamicznym, zasubskrybuj zdarzenie i wywołaj AppDomain.AssemblyResolveGetType je przed zapisaniem. W przeciwnym razie otrzymasz dwie kopie zestawu w pamięci.

Parametr throwOnError określa, co się stanie, gdy typ nie zostanie znaleziony, a także pomija niektóre inne warunki wyjątku, zgodnie z opisem w sekcji Wyjątki. Niektóre wyjątki są zgłaszane niezależnie od wartości throwOnError. Jeśli na przykład typ zostanie znaleziony, ale nie można go załadować, TypeLoadException zostanie zgłoszony, nawet jeśli throwOnError ma wartość false.

W poniższej tabeli przedstawiono, które elementy członkowskie klasy bazowej są zwracane przez Get metody podczas odzwierciedlania typu.

Typ elementu członkowskiego Static Niestatyczna
Konstruktor Nie Nie
Pole Nie Tak. Pole jest zawsze ukryte przez nazwę i podpis.
Zdarzenie Nie dotyczy Zasadą systemu typu jest to, że dziedziczenie jest takie samo, jak w przypadku metod, które implementują właściwość. Odbicie traktuje właściwości jako ukryte przez nazwę i podpis. Patrz Uwaga 2 poniżej.
Metoda Nie Tak. Metodą (zarówno wirtualną, jak i niewirtualną) może być ukrycie przez nazwę lub przez nazwę i podpis.
Typu zagnieżdżony Nie Nie
Właściwość Nie dotyczy Zasadą systemu typu jest to, że dziedziczenie jest takie samo, jak w przypadku metod, które implementują właściwość. Odbicie traktuje właściwości jako ukryte przez nazwę i podpis. Patrz Uwaga 2 poniżej.
  1. Ukrycie przez nazwę i podpis dotyczy wszystkich części podpisu, w tym modyfikatorów niestandardowych, zwraca typy, typy parametrów, wartowników i niezarządzane konwencje wywoływania. To jest porównanie binarne.

  2. W celu odbicia właściwości i zdarzenia są ukrywane przez nazwę i podpis. Jeśli istnieje właściwość z akcesorem pobierania i ustawiania w klasie bazowej, ale odziedziczona klasa ma tylko akcesor pobierania, właściwość klasy odziedziczonej ukrywa właściwości klasy bazowej, a nie można uzyskać dostępu do metody ustawiającej w klasie bazowej.

  3. Atrybuty niestandardowe nie są częścią wspólnego typu systemowego.

Tablice lub typy COM nie są wyszukiwane, chyba że zostały już załadowane do tabeli dostępnych klas.

typeName może być nazwą typu kwalifikowaną przez przestrzeń nazw lub kwalifikowaną przez zestaw nazwę, która zawiera specyfikację nazwy zestawu. Zobacz: .

Jeśli typeName zawiera przestrzeń nazw, ale nie nazwę zestawu, ta metoda wyszukuje tylko zestaw obiektu wywołującego i mscorlib.dll/System.Private.CoreLib.dll w tej kolejności. Jeśli typeName jest w pełni kwalifikowana z częściową lub kompletną nazwą zestawu, ta metoda wyszukuje w określonym zestawie. Jeśli zestaw ma silną nazwę, wymagana jest pełna nazwa zestawu.

Właściwość AssemblyQualifiedName zwraca w pełni kwalifikowaną nazwę typu, w tym typy zagnieżdżone, nazwę zestawu i argumenty typu. Wszystkie kompilatory, które obsługują aparat plików wykonywalnych języka wspólnego, w trakcie wykonania wyemitują prostą nazwę klasy zagnieżdżonej, a odbicie podczas kwerendy stworzy zniekształcone nazwy zgodnie z następującymi konwencjami.

Uwaga

Architektura procesora jest częścią tożsamości zestawu i może być określona jako część ciągów nazw zestawów. Na przykład "ProcessorArchitecture = msil". Jednak nie jest uwzględniany w ciągu zwracanym przez AssemblyQualifiedName właściwość ze względów zgodności. Można również załadować typy, tworząc AssemblyName obiekt i przekazując go do odpowiedniego przeciążenia Load metody. Następnie można użyć Assembly.GetType metody , aby załadować typy z zestawu. Zobacz też AssemblyName.ProcessorArchitecture.

Ogranicznik Znaczenie
Ukośnik odwrotny (\) Znak ucieczki.
Backtick (') Poprzedza co najmniej jedną cyfrę reprezentującą liczbę parametrów typu znajdujących się na końcu nazwy typu ogólnego.
Nawiasy kwadratowe ([]) Ujmij listę argumentów typu ogólnego dla skonstruowanego typu ogólnego; w obrębie listy argumentów typu należy ująć typ kwalifikowany przez zestaw.
Przecinek (,) Poprzedza nazwę zestawu.
Kropka (.) Wskazuje przestrzeń nazw identyfikatorów.
Znak plus (+) Poprzedza klasę zagnieżdżoną.

Na przykład w pełni kwalifikowana nazwa klasy może wyglądać następująco:

TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly

Jeśli przestrzeń nazw to TopNamespace.Sub+Przestrzeń nazw, ciąg musi poprzedzić znak plus (+) znakiem ucieczki (\), aby zapobiec interpretowaniu go jako separatora zagnieżdżenia. Odbicie emituje ten ciąg w następujący sposób:

TopNamespace.Sub\+Namespace.ContainingClass+NestedClass,MyAssembly

Znak "++" staje się "\+\+", a znak "\" staje się "\\".

Tę kwalifikowaną nazwę można utrwalić i później użyć do załadowania elementu Type. Aby wyszukać i załadować element Type, użyj metody GetType tylko z nazwą typu lub nazwą kwalifikowanego typu zestawu. GetType z nazwą typu będzie szukać Type tylko w zestawie obiektu wywołującego, a następnie w zestawie systemowym. GetType z kwalifikowaną nazwą typu zestawu będzie szukać Type w dowolnym zestawie.

Nazwy typów mogą obejmować końcowe znaki, które wyznaczają dodatkowe informacje dotyczące typu, na przykład to, czy typ jest typem odwołania, typem wskaźnika lub typem tablicowym. Aby pobrać nazwę typu bez tych końcowych znaków, użyj , t.GetElementType().ToString()gdzie t jest typem.

Spacje są istotne we wszystkich składnikach nazwy z wyjątkiem nazwy zestawu. Spacje przed separatorem w nazwie zestawu ',' są istotne, ale spacje po separatorze ',' są ignorowane.

Nazwa typu ogólnego kończy się backtick ('), po którym następują cyfry reprezentujące liczbę argumentów typu ogólnego. Celem tej nazwy jest umożliwienie kompilatorom obsługi typów ogólnych o tej samej nazwie, ale z różnymi liczbami parametrów typu występującymi w tym samym zakresie. Na przykład odbicie zwraca nazwy Tuple`1 mangled i Tuple`2 z metod Tuple(Of T) ogólnych i Tuple(Of T0, T1) w Visual Basic lub Tuple<T>Tuple<T0, T1> w Visual C#.

W przypadku typów ogólnych lista argumentów typu jest ujęta w nawiasy, a argumenty typu są rozdzielane przecinkami. Na przykład ogólny Dictionary<TKey,TValue> ma dwa parametry typu. MyType Element Dictionary<TKey,TValue> z kluczami typu String może być reprezentowany w następujący sposób:

System.Collections.Generic.Dictionary`2[System.String,MyType]

Aby określić typ kwalifikowany do zestawu na liście argumentów typu, należy ująć typ kwalifikowany przez zestaw w nawiasy. W przeciwnym razie przecinki oddzielające części nazwy kwalifikowanej przez zestaw są interpretowane jako rozdzielanie dodatkowych argumentów typu. Na przykład element Dictionary<TKey,TValue>MyType z MyAssembly.dll z kluczami typu Stringmoże być określony w następujący sposób:

Type.GetType("System.Collections.Generic.Dictionary`2[System.String,[MyType,MyAssembly]]")

Uwaga

Typ kwalifikowany do zestawu można ujęć w nawiasy tylko wtedy, gdy pojawia się on na liście parametrów typu. Reguły wyszukiwania zestawów dla kwalifikowanych i niekwalifikowanych typów na listach parametrów typów są takie same jak reguły dla kwalifikowanych i niekwalifikowanych typów niegenerowanych.

Typy dopuszczane do wartości null to specjalny przypadek typów ogólnych. Na przykład wartość null może być reprezentowana przez ciąg "System.Nullable'1 Int32 [System.Int32]".

Uwaga

W języku C#, C++i Visual Basic można również uzyskać typy dopuszczane do wartości null przy użyciu operatorów typów. Na przykład typ dopuszczający Boolean wartość null jest zwracany w typeof(Nullable<bool>) języku C#, w Nullable<Boolean>::typeid języku C++, a w GetType(Nullable(Of Boolean)) Visual Basic.

W poniższej tabeli przedstawiono składnię używaną z różnymi typami GetType .

Aby uzyskać Zastosowanie
Dopuszczana wartość null Int32 Type.GetType("System.Nullable`1[System.Int32]")
Wskaźnik niezarządzany do MyType Type.GetType("MyType*")
Wskaźnik niezarządzany do wskaźnika do MyType Type.GetType("MyType**")
Wskaźnik zarządzany lub odwołanie do MyType Type.GetType("MyType&"). Należy pamiętać, że w przeciwieństwie do wskaźników odwołania są ograniczone do jednego poziomu.
Klasa nadrzędna i zagnieżdżona klasa Type.GetType("MyParentClass+MyNestedClass")
Tablica jednowymiarowa z dolną granicą 0 Type.GetType("MyArray[]")
Tablica jednowymiarowa z nieznaną dolną granicą Type.GetType("MyArray[*]")
Tablica nwymiarowa Przecinek (,) wewnątrz nawiasów łącznie n-1 razy. Na przykład System.Object[,,] reprezentuje tablicę trójwymiarową Object .
Tablica dwuwymiarowa Type.GetType("MyArray[][]")
Prostokątna dwuwymiarowa tablica z nieznanymi dolnymi granicami Type.GetType("MyArray[,]")
Typ ogólny z jednym argumentem typu Type.GetType("MyGenericType`1[MyType]")
Typ ogólny z dwoma argumentami typu Type.GetType("MyGenericType`2[MyType,AnotherType]")
Typ ogólny z dwoma argumentami typu kwalifikowanego zestawu Type.GetType("MyGenericType`2[[MyType,MyAssembly],[AnotherType,AnotherAssembly]]")
Kwalifikowany typ ogólny zestawu z argumentem typu kwalifikowanego przez zestaw Type.GetType("MyGenericType`1[[MyType,MyAssembly]],MyGenericTypeAssembly")
Typ ogólny, którego argument typu jest typem ogólnym z dwoma argumentami typu Type.GetType("MyGenericType`1[AnotherGenericType`2[MyType,AnotherType]]")

Zobacz też

Dotyczy

GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>)

Pobiera typ o określonej nazwie, opcjonalnie udostępniając metody niestandardowe do rozpoznawania zestawu i typu.

public:
 static Type ^ GetType(System::String ^ typeName, Func<System::Reflection::AssemblyName ^, System::Reflection::Assembly ^> ^ assemblyResolver, Func<System::Reflection::Assembly ^, System::String ^, bool, Type ^> ^ typeResolver);
public static Type? GetType (string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly?>? assemblyResolver, Func<System.Reflection.Assembly?,string,bool,Type?>? typeResolver);
public static Type GetType (string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly> assemblyResolver, Func<System.Reflection.Assembly,string,bool,Type> typeResolver);
static member GetType : string * Func<System.Reflection.AssemblyName, System.Reflection.Assembly> * Func<System.Reflection.Assembly, string, bool, Type> -> Type
Public Shared Function GetType (typeName As String, assemblyResolver As Func(Of AssemblyName, Assembly), typeResolver As Func(Of Assembly, String, Boolean, Type)) As Type

Parametry

typeName
String

Nazwa typu do pobrania. typeResolver Jeśli parametr jest podany, nazwa typu może być dowolnym ciągiem, który typeResolver może zostać rozpoznany. assemblyResolver Jeśli parametr jest podany lub jeśli jest używana rozdzielczość typu standardowego, typeName musi być kwalifikowaną nazwą zestawu (patrz AssemblyQualifiedName), chyba że typ znajduje się w aktualnie wykonywanym zestawie lub w mscorlib.dll/System.Private.CoreLib.dll, w którym przypadku wystarczy podać nazwę typu kwalifikowaną przez jego przestrzeń nazw.

assemblyResolver
Func<AssemblyName,Assembly>

Metoda, która lokalizuje i zwraca zestaw określony w elemecie typeName. Nazwa zestawu jest przekazywana jako assemblyResolverAssemblyName obiekt. Jeśli typeName nie zawiera nazwy zestawu, assemblyResolver nie jest wywoływana. Jeśli assemblyResolver nie podano, jest wykonywana standardowa rozdzielczość zestawu.

Uwaga: nie przekazuj metod nieznanych ani niezaufanych wywołujących. Może to spowodować podniesienie uprawnień dla złośliwego kodu. Użyj tylko określonych przez siebie metod lub tych, które znasz.

typeResolver
Func<Assembly,String,Boolean,Type>

Metoda, która lokalizuje i zwraca typ określony przez typeName zestaw zwracany przez assemblyResolver lub przez standardową rozdzielczość zestawu. Jeśli nie podano zestawu, typeResolver metoda może go podać. Metoda przyjmuje również parametr określający, czy przeprowadzić wyszukiwanie bez uwzględniania wielkości liter; false jest przekazywany do tego parametru.

Uwaga: nie przekazuj metod nieznanych ani niezaufanych wywołujących.

Zwraca

Typ o określonej nazwie lub null jeśli typ nie zostanie znaleziony.

Wyjątki

typeName to null.

Inicjator klasy jest wywoływany i zgłasza wyjątek.

Błąd występuje, gdy typeName jest analizowany w nazwie typu i nazwie zestawu (na przykład gdy prosta nazwa typu zawiera niewyrażony znak specjalny).

-lub-

typeName reprezentuje typ ogólny, który ma typ wskaźnika, ByRef typ lub Void jako jeden z argumentów typu.

-lub-

typeName reprezentuje typ ogólny, który ma nieprawidłową liczbę argumentów typu.

-lub-

typeName reprezentuje typ ogólny, a jeden z jego argumentów typu nie spełnia ograniczeń dla odpowiedniego parametru typu.

typeNamereprezentuje nieprawidłowy typ, na przykład tablicę .TypedReference

Zestaw lub jeden z jego elementów zależnych został znaleziony, ale nie można go załadować.

-lub-

typeName zawiera nieprawidłową nazwę zestawu.

-lub-

typeName jest prawidłową nazwą zestawu bez nazwy typu.

Zestaw lub jedna z jego zależności nie jest prawidłowa dla aktualnie załadowanego środowiska uruchomieniowego.

Uwagi

Scenariusze użycia dla tej metody i szczegółowe informacje o assemblyResolver parametrach i typeResolver można znaleźć w przeciążeniu GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) metody .

Uwaga

Jeśli typeName nie można odnaleźć, wywołanie GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>) metody zwraca nullwartość . Nie zgłasza wyjątku. Aby kontrolować, czy zgłaszany jest wyjątek, wywołaj przeciążenie GetType metody, która ma throwOnError parametr.

Wywoływanie tego przeciążenia metody jest takie samo jak wywoływanie GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) przeciążenia metody i określanie false parametrów throwOnError i ignoreCase .

Dotyczy

GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean)

Pobiera typ z określoną nazwą, określając, czy zgłosić wyjątek, jeśli typ nie zostanie znaleziony, i opcjonalnie podaj niestandardowe metody rozpoznawania zestawu i typu.

public:
 static Type ^ GetType(System::String ^ typeName, Func<System::Reflection::AssemblyName ^, System::Reflection::Assembly ^> ^ assemblyResolver, Func<System::Reflection::Assembly ^, System::String ^, bool, Type ^> ^ typeResolver, bool throwOnError);
public static Type? GetType (string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly?>? assemblyResolver, Func<System.Reflection.Assembly?,string,bool,Type?>? typeResolver, bool throwOnError);
public static Type GetType (string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly> assemblyResolver, Func<System.Reflection.Assembly,string,bool,Type> typeResolver, bool throwOnError);
static member GetType : string * Func<System.Reflection.AssemblyName, System.Reflection.Assembly> * Func<System.Reflection.Assembly, string, bool, Type> * bool -> Type
Public Shared Function GetType (typeName As String, assemblyResolver As Func(Of AssemblyName, Assembly), typeResolver As Func(Of Assembly, String, Boolean, Type), throwOnError As Boolean) As Type

Parametry

typeName
String

Nazwa typu do pobrania. typeResolver Jeśli parametr jest podany, nazwa typu może być dowolnym ciągiem, który typeResolver może zostać rozpoznany. assemblyResolver Jeśli parametr jest podany lub jeśli jest używana rozdzielczość typu standardowego, typeName musi być kwalifikowaną nazwą zestawu (patrz AssemblyQualifiedName), chyba że typ znajduje się w aktualnie wykonywanym zestawie lub w mscorlib.dll/System.Private.CoreLib.dll, w którym przypadku wystarczy podać nazwę typu kwalifikowaną przez jego przestrzeń nazw.

assemblyResolver
Func<AssemblyName,Assembly>

Metoda, która lokalizuje i zwraca zestaw określony w elemecie typeName. Nazwa zestawu jest przekazywana jako assemblyResolverAssemblyName obiekt. Jeśli typeName nie zawiera nazwy zestawu, assemblyResolver nie jest wywoływana. Jeśli assemblyResolver nie podano, jest wykonywana standardowa rozdzielczość zestawu.

Uwaga: nie przekazuj metod nieznanych ani niezaufanych wywołujących. Może to spowodować podniesienie uprawnień dla złośliwego kodu. Użyj tylko określonych przez siebie metod lub tych, które znasz.

typeResolver
Func<Assembly,String,Boolean,Type>

Metoda, która lokalizuje i zwraca typ określony przez typeName zestaw zwracany przez assemblyResolver lub przez standardową rozdzielczość zestawu. Jeśli nie podano zestawu, metoda może go podać. Metoda przyjmuje również parametr określający, czy przeprowadzić wyszukiwanie bez uwzględniania wielkości liter; false jest przekazywany do tego parametru.

Uwaga: nie przekazuj metod nieznanych ani niezaufanych wywołujących.

throwOnError
Boolean

true zgłaszać wyjątek, jeśli nie można odnaleźć typu; false aby zwrócić nullwartość . Określenie false powoduje również pomijanie innych warunków wyjątku, ale nie wszystkich z nich. Zobacz sekcję Wyjątki.

Zwraca

Typ o określonej nazwie. Jeśli typ nie zostanie znaleziony, parametr określa, throwOnError czy null jest zwracany, czy zgłaszany jest wyjątek. W niektórych przypadkach zgłaszany jest wyjątek niezależnie od wartości throwOnError. Zobacz sekcję Wyjątki.

Wyjątki

typeName to null.

Inicjator klasy jest wywoływany i zgłasza wyjątek.

throwOnError jest i true nie można odnaleźć typu.

-lub-

throwOnError jest true i typeName zawiera nieprawidłowe znaki, takie jak karta osadzona.

-lub-

throwOnErrortypeName jest ciągiem true pustym.

-lub-

throwOnError to true i typeName reprezentuje typ tablicy o nieprawidłowym rozmiarze.

-lub-

typeNamereprezentuje tablicę .TypedReference

Błąd występuje, gdy typeName jest analizowany w nazwie typu i nazwie zestawu (na przykład gdy prosta nazwa typu zawiera niewyrażony znak specjalny).

-lub-

throwOnError to true i typeName zawiera nieprawidłową składnię (na przykład "MyType[,*,]").

-lub-

typeName reprezentuje typ ogólny, który ma typ wskaźnika, ByRef typ lub Void jako jeden z argumentów typu.

-lub-

typeName reprezentuje typ ogólny, który ma nieprawidłową liczbę argumentów typu.

-lub-

typeName reprezentuje typ ogólny, a jeden z jego argumentów typu nie spełnia ograniczeń dla odpowiedniego parametru typu.

throwOnError nie true można odnaleźć zestawu lub jednego z jego zależności.

-lub-

typeName zawiera nieprawidłową nazwę zestawu.

-lub-

typeName jest prawidłową nazwą zestawu bez nazwy typu.

Zestaw lub jeden z jego elementów zależnych został znaleziony, ale nie można go załadować.

Zestaw lub jedna z jego zależności nie jest prawidłowa dla aktualnie załadowanego środowiska uruchomieniowego.

Uwagi

Scenariusze użycia dla tej metody i szczegółowe informacje o assemblyResolver parametrach i typeResolver można znaleźć w przeciążeniu GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) metody .

Wywoływanie tego przeciążenia metody jest takie samo jak wywoływanie GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) przeciążenia metody i określanie false parametru ignoreCase .

Dotyczy