Type.GetType Metoda

Definicja

Type Pobiera obiekt reprezentujący określony typ.

Przeciążenia

GetType()

Pobiera bieżący Typeelement .

GetType(String)

Pobiera element Type z określoną nazwą, wykonując wyszukiwanie uwzględniające wielkość 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 uwzględniające wielkość liter.

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.

GetType()

Pobiera bieżący Typeelement .

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

Zwraca

Type

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

Nazwa kwalifikowana zestawu typu do pobrania. Zobacz: AssemblyQualifiedName. 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

Type

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 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 lub jeden z jego elementów zależnych nie są prawidłowe.

-lub-

Wersja 2.0 lub nowsza środowiska uruchomieniowego języka wspólnego jest obecnie ładowana, a zestaw został skompilowany z nowszą wersją.

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ż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 Visual Basic.

Uwaga

Jeśli typeName nie można go odnaleźć, wywołanie GetType(String) metody zwraca wartość null. 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 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.AssemblyResolve GetType 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 jego przestrzeń nazw lub kwalifikowaną przez zestaw nazwę, która zawiera specyfikację nazwy zestawu. Zobacz: AssemblyQualifiedName.

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

W wersji 2.0 środowiska .NET Framework architektura procesora jest dodawana do tożsamości zestawu i może być określona jako część zestawu ciągu nazw. Na przykład "ProcessorArchitecture = msil". Jednak nie jest on 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 Load przeciążenia metody. Następnie można użyć metody do załadowania Assembly.GetType typów 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 ([]) Dołącz 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+Namespace, ciąg musiałby poprzedzić znak plus (+) znakiem ucieczki (\), aby zapobiec interpretowaniu go jako separatora zagnieżdżania. Odbicie emituje ten ciąg w następujący sposób:

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

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

Ta kwalifikowana nazwa może być utrwalana, a później używana do załadowania elementu Type. Aby wyszukać i załadować element Type, użyj GetType polecenia 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 znaków końcowych, użyj metody 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 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

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("MyType[]")
Tablica jednowymiarowa 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 dwuwymiarowa tablica z nieznanymi dolnymi granicami 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]]")
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, 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.

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

Kwalifikowana nazwa zestawu typu do pobrania. Zobacz: AssemblyQualifiedName. 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ł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

Type

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ć.

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

Zestaw lub jeden z jego elementów zależnych nie są prawidłowe.

-lub-

Wersja 2.0 lub nowsza środowiska uruchomieniowego języka wspólnego jest obecnie ładowana, a zestaw został skompilowany przy użyciu nowszej wersji.

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ż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.

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 pobierania GetType typu w przejściowym zestawie dynamicznym zwraca wartość null.

Aby użyć GetType modułu dynamicznego, zasubskrybuj AppDomain.AssemblyResolve zdarzenie i wywołaj przed GetType 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 pewne 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 jest to 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 jego przestrzeń nazw lub kwalifikowaną przez zestaw nazwę, która zawiera specyfikację nazwy zestawu. Zobacz: AssemblyQualifiedName.

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

W wersji 2.0 środowiska .NET Framework architektura procesora jest dodawana do tożsamości zestawu i może być określona jako część zestawu ciągu nazw. Na przykład "ProcessorArchitecture = msil". Jednak nie jest on 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 Load przeciążenia metody. Następnie można użyć metody do załadowania Assembly.GetType typów 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 ([]) Dołącz 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+Namespace, ciąg musiałby poprzedzić znak plus (+) znakiem ucieczki (\), aby zapobiec interpretowaniu go jako separatora zagnieżdżania. 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 (`), a po nim 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> i 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>) w 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ą 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 uwzględniające wielkość liter.

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: AssemblyQualifiedName. 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

Type

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 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

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 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ć.

Zestaw lub jeden z jego elementów zależnych nie są prawidłowe.

-lub-

Wersja 2.0 lub nowsza środowiska uruchomieniowego języka wspólnego jest obecnie ładowana, a zestaw został skompilowany z nowszą wersją.

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 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.AssemblyResolve GetType 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: AssemblyQualifiedName.

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

W wersji 2.0 środowiska .NET Framework architektura procesora jest dodawana do tożsamości zestawu i może być określona jako część zestawu ciągu nazw. Na przykład "ProcessorArchitecture = msil". Jednak nie jest uwzględniany w ciągu zwróconym AssemblyQualifiedName przez 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  

Gdyby przestrzeń nazw to TopNamespace.Sub+Przestrzeń nazw, ciąg musiałby poprzedzić znak plus (+) znakiem ucieczki (\), aby zapobiec interpretowaniu go jako separatora zagnieżdżania. 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 (`), a po nim 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> i 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>) w 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ą 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 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 jest w stanie rozpoznać. assemblyResolver Jeśli parametr jest podany lub jeśli jest używana standardowa rozdzielczość typu, 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 assemblyResolver AssemblyName 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 lub 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 lub niezaufanych wywołujących.

Zwraca

Type

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 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 jeden z jego elementów zależnych nie są prawidłowe.

-lub-

Zestaw został skompilowany przy użyciu nowszej wersji aparatu plików wykonywalnych języka wspólnego niż wersja, która jest aktualnie załadowana.

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 jest w stanie rozpoznać. assemblyResolver Jeśli parametr jest podany lub jeśli jest używana standardowa rozdzielczość typu, 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 assemblyResolver AssemblyName 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 lub 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 lub 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

Type

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 jeden z jego elementów zależnych nie są prawidłowe.

-lub-

Zestaw został skompilowany przy użyciu nowszej wersji aparatu plików wykonywalnych języka wspólnego niż wersja, która jest aktualnie załadowana.

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

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 jest w stanie rozpoznać. assemblyResolver Jeśli parametr jest podany lub jeśli jest używana standardowa rozdzielczość typu, 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 assemblyResolver AssemblyName 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 lub 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 lub 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

Type

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

Błąd występuje, gdy typeName jest analizowany w nazwie typu i nazwie zestawu (na przykład gdy nazwa prostego typu zawiera niewyobrażany 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 jeden z jego elementów zależnych nie są prawidłowe.

-lub-

Zestaw został skompilowany przy użyciu nowszej wersji aparatu plików wykonywalnych języka wspólnego niż wersja, która jest aktualnie załadowana.

Uwagi

Użyj tego przeciążenia metody i skojarzonych przeciążeń (GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>) i GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean)), aby zastąpić domyślną implementację GetType metody bardziej elastyczną implementacją. Podając własne metody rozpoznawania nazw typów i nazw zestawów, które je zawierają, można wykonać następujące czynności:

  • Kontrolowanie wersji zestawu, z której jest ładowany typ.

  • Podaj inne miejsce, aby wyszukać nazwę typu, która nie zawiera nazwy zestawu.

  • Załaduj zestawy przy użyciu częściowych nazw zestawów.

  • Zwracaj podklasy System.Type , które nie są tworzone przez środowisko uruchomieniowe języka wspólnego (CLR).

Na przykład w serializacji odpornej na wersje ta metoda umożliwia wyszukiwanie zestawu "najlepiej pasującego" przy użyciu częściowej nazwy. Inne przeciążenia GetType metody wymagają nazwy kwalifikowanego typu zestawu, która zawiera numer wersji.

Alternatywne implementacje systemu typów mogą wymagać zwrócenia podklas System.Type , które nie są tworzone przez clR; wszystkie typy zwracane przez inne przeciążenia GetType metody to typy środowiska uruchomieniowego.

Uwagi dotyczące użytkowania

Ta metoda przeciąża i skojarzone przeciążenia analizuje typeName nazwę typu i nazwę zestawu, a następnie rozpoznawać nazwy. Rozpoznawanie nazwy zestawu występuje przed rozpoznawaniem nazwy typu, ponieważ nazwa typu musi zostać rozpoznana w kontekście zestawu.

Uwaga

Jeśli nie znasz koncepcji nazw typów kwalifikowanych przez zestaw, zobacz AssemblyQualifiedName właściwość .

Jeśli typeName nie jest kwalifikowaną nazwą zestawu, rozpoznawanie zestawów zostanie pominięte. Niekwalifikowane nazwy typów można rozpoznać w kontekście mscorlib.dll/System.Private.CoreLib.dll lub aktualnie wykonującego zestaw lub opcjonalnie można podać zestaw w parametrze typeResolver . Efekty dołączania lub pomijania nazwy zestawu dla różnych rodzajów rozpoznawania nazw są wyświetlane jako tabela w sekcji Rozpoznawanie nazw mieszanych .

Ogólne informacje o użyciu:

  • Nie przekazuj metod do assemblyResolver lub typeResolver jeśli pochodzą z nieznanych lub niezaufanych wywołujących. Użyj tylko określonych przez siebie metod lub tych, które znasz.

    Przestroga

    Użycie metod nieznanych lub niezaufanych wywołujących może spowodować podniesienie uprawnień dla złośliwego kodu.

  • Jeśli pominięto assemblyResolver parametry i/lub typeResolver , wartość parametru throwOnError jest przekazywana do metod wykonujących rozdzielczość domyślną.

  • Jeśli throwOnError jest to true, ta metoda zgłasza wartość w typeResolver przypadku zwracania nullTypeLoadException wartości , a gdy FileNotFoundException assemblyResolver zwraca nullwartość .

  • Ta metoda nie przechwytuje wyjątków zgłaszanych przez assemblyResolver i typeResolver. Ponosisz odpowiedzialność za wszelkie wyjątki, które są zgłaszane przez metody rozpoznawania nazw.

Rozpoznawanie zespołów

Metoda assemblyResolver odbiera AssemblyName obiekt, który jest generowany przez analizowanie nazwy zestawu ciągów zawartej w typeNamepliku . Jeśli typeName nie zawiera nazwy zestawu, assemblyResolver nie jest wywoływana i null jest przekazywana do typeResolverelementu .

Jeśli assemblyResolver nie podano, standardowe sondowanie zestawów jest używane do lokalizowania zestawu. Jeśli assemblyResolver zostanie podana, metoda nie wykonuje standardowego sondowania. W takim przypadku należy upewnić się, GetType że assemblyResolver można obsłużyć wszystkie przekazane zestawy.

Metoda powinna zostać zwrócona assemblyResolver null , jeśli nie można rozpoznać zestawu. Jeśli assemblyResolver funkcja zwraca nullwartość , typeResolver nie jest wywoływana i nie ma dalszego przetwarzania; dodatkowo, jeśli throwOnError jest to true, FileNotFoundException jest zgłaszana wartość .

Jeśli przekazany assemblyResolver element AssemblyName jest nazwą częściową, co najmniej jedna z jego części to null. Jeśli na przykład nie ma wersji, Version właściwość to null. Version Jeśli właściwość, CultureInfo właściwość i GetPublicKeyToken metoda wszystkie zwracają nullwartość , podano tylko prostą nazwę zestawu. Metoda assemblyResolver może używać lub ignorować wszystkie części nazwy zestawu.

Efekty różnych opcji rozpoznawania zestawów są wyświetlane jako tabela w sekcji Rozpoznawanie nazw mieszanych dla prostych i kwalifikowanych zestawów nazw typów.

Rozpoznawanie typów

Jeśli typeName nie określi nazwy zestawu, typeResolver zawsze jest wywoływana. Jeśli typeName określa nazwę zestawu, jest wywoływana tylko wtedy, typeResolver gdy nazwa zestawu zostanie pomyślnie rozpoznana. Jeśli assemblyResolver lub standardowe sondowanie zestawów zwraca nullwartość , typeResolver nie jest wywoływana.

Metoda typeResolver otrzymuje trzy argumenty:

  • Zestaw do wyszukiwania lub null jeśli typeName nie zawiera nazwy zestawu.

  • Prosta nazwa typu. W przypadku typu zagnieżdżonego jest to najbardziej zewnętrzny typ zawierający. W przypadku typu ogólnego jest to prosta nazwa typu ogólnego.

  • Wartość logiczna, która ma true być ignorowana, jeśli wielkość nazw typów ma być ignorowana.

Implementacja określa sposób użycia tych argumentów. Metoda powinna zostać zwrócona typeResolver null , jeśli nie może rozpoznać typu. W przypadku zwracania null wartości i throwOnError ma wartość true, to przeciążenie GetType zwraca wartość TypeLoadException.typeResolver

Efekty różnych opcji rozpoznawania typów są wyświetlane jako tabela w sekcji Rozpoznawanie nazw mieszanych dla prostych i kwalifikowanych zestawów nazw.

Rozpoznawanie zagnieżdżonych typów

Jeśli typeName jest typem zagnieżdżonym, przekazywana jest typeResolvertylko nazwa najbardziej zewnętrznego typu zawierającego . W typeResolver przypadku zwracania tego typu GetNestedType metoda jest wywoływana rekursywnie do momentu rozpoznania najbardziej zagnieżdżonego typu wewnętrznego.

Rozpoznawanie typów rodzajowych

Element GetType jest wywoływany rekursywnie w celu rozpoznania typów ogólnych: najpierw, aby rozpoznać sam typ ogólny, a następnie rozpoznać argumenty typu. Jeśli argument typu jest ogólny, jest wywoływany rekursywnie, GetType aby rozpoznać argumenty typu itd.

Kombinacja parametrów assemblyResolver i typeResolver musi być w stanie rozpoznać wszystkie poziomy tej rekursji. Załóżmy na przykład, że podajesz element assemblyResolver , który kontroluje ładowanie elementu MyAssembly. Załóżmy, że chcesz rozpoznać typ Dictionary<string, MyType> ogólny (Dictionary(Of String, MyType) w Visual Basic). Możesz przekazać następującą nazwę typu ogólnego:

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

Zwróć uwagę, że MyType jest to jedyny argument typu kwalifikowanego przez zestaw. Nazwy Dictionary<TKey,TValue> klas i String nie są kwalifikowane przez zestaw. Musi typeResolver być w stanie obsłużyć zestaw lub null, ponieważ zostanie on odebrany null dla Dictionary<TKey,TValue> i String. Może obsłużyć ten przypadek, wywołując przeciążenie GetType metody, która przyjmuje ciąg, ponieważ obie niekwalifikowane nazwy typów znajdują się w mscorlib.dll/System.Private.CoreLib.dll:

Type t = Type.GetType(test,
                      (aName) => aName.Name == "MyAssembly" ?
                          Assembly.LoadFrom(@".\MyPath\v5.0\MyAssembly.dll") : null,
                      (assem, name, ignore) => assem == null ?
                          Type.GetType(name, false, ignore) :
                              assem.GetType(name, false, ignore)
                     );
let t =
    Type.GetType(test,
        (fun aName ->
            if aName.Name = "MyAssembly" then
                Assembly.LoadFrom @".\MyPath\v5.0\MyAssembly.dll"
            else null),
        fun assem name ignr ->
            if assem = null then
                Type.GetType(name, false, ignr)
            else
                assem.GetType(name, false, ignr))

Metoda nie jest wywoływana assemblyResolver dla typu słownika i typu ciągu, ponieważ te nazwy typów nie są kwalifikowane przez zestaw.

Teraz załóżmy, że zamiast , pierwszym typem argumentu System.Stringogólnego jest YourType, z :YourAssembly

"System.Collections.Generic.Dictionary`2[[YourNamespace.YourType, YourAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null], [MyNamespace.MyType, MyAssembly]]"  

Ponieważ ten zestaw nie jest ani mscorlib.dll/System.Private.CoreLib.dll, ani aktualnie wykonywany zestaw, nie można rozpoznać YourType bez nazwy kwalifikowanej zestawu. assemblyResolve Ponieważ będzie on wywoływany rekursywnie, musi być w stanie obsłużyć ten przypadek. Zamiast zwracać null zestawy inne niż MyAssembly, teraz wykonuje obciążenie zestawu przy użyciu dostarczonego AssemblyName obiektu.

Type t2 = Type.GetType(test,
                       (aName) => aName.Name == "MyAssembly" ?
                           Assembly.LoadFrom(@".\MyPath\v5.0\MyAssembly.dll") :
                           Assembly.Load(aName),
                       (assem, name, ignore) => assem == null ?
                           Type.GetType(name, false, ignore) :
                               assem.GetType(name, false, ignore), true
                      );
let t2 =
    Type.GetType(test,
        (fun aName ->
            if aName.Name = "MyAssembly" then
                Assembly.LoadFrom @".\MyPath\v5.0\MyAssembly.dll"
            else Assembly.Load aName),
        (fun assem name ignr ->
            if assem = null then
                Type.GetType(name, false, ignr)
            else
                assem.GetType(name, false, ignr)), true)

Wróć do informacji o użyciu.

Rozpoznawanie nazw typów ze znakami specjalnymi

Niektóre znaki mają specjalne znaczenie w nazwach kwalifikowanych zestawów. Jeśli prosta nazwa typu zawiera te znaki, znaki powodują błędy analizowania, gdy prosta nazwa jest częścią nazwy kwalifikowanej przez zestaw. Aby uniknąć błędów analizowania, przed przekazaniem nazwy kwalifikowanej do zestawu do metody należy wrócić znaki specjalne ukośnikiem odwrotnym GetType . Jeśli na przykład typ ma nazwę Strange]Type, znak ucieczki musi zostać dodany przed nawiasem kwadratowym w następujący sposób: Strange\]Type.

Uwaga

Nazwy z takimi znakami specjalnymi nie mogą być tworzone w Visual Basic lub C#, ale mogą być tworzone przy użyciu języka Microsoft Intermediate Language (MSIL) lub emitowania zestawów dynamicznych.

W poniższej tabeli przedstawiono znaki specjalne dla nazw typów.

Znak Znaczenie
, (przecinek) Ogranicznik dla nazw kwalifikowanych zestawów.
[] (nawiasy kwadratowe) Jako para sufiksów wskazuje typ tablicy; jako para ograniczników ujęta jest w ogólne listy argumentów i nazwy kwalifikowane zestawów.
& (handlowe „i”) Jako sufiks wskazuje, że typ jest typem referencyjnym.
* (gwiazdka) Jako sufiks wskazuje, że typ jest typem wskaźnika.
+ (plus) Ogranicznik dla typów zagnieżdżonych.
\ (ukośnik odwrotny) Znak ucieczki.

Właściwości, takie jak AssemblyQualifiedName zwracanie poprawnie ciągów ucieczki. Należy prawidłowo przekazać ciągi ucieczki do GetType metody . Z kolei GetType metoda przekazuje poprawnie nazwy ucieczki do typeResolver i do domyślnych metod rozpoznawania typów. Jeśli musisz porównać nazwę z nieokreśloną nazwą w typeResolverpliku , musisz usunąć znaki ucieczki.

Wróć do informacji o użyciu.

Rozpoznawanie nazw mieszanych

W poniższej tabeli podsumowano interakcje między assemblyResolver, typeResolveri domyślnym rozpoznawaniem nazw dla wszystkich kombinacji nazwy typu i nazwy zestawu w programie typeName:

Zawartość nazwy typu Metoda rozpoznawania zestawów Metoda rozpoznawania typów Wynik
typ, zestaw null null Odpowiednik wywoływania Type.GetType(String, Boolean, Boolean) przeciążenia metody.
typ, zestaw podano null assemblyResolver zwraca zestaw lub zwraca null wartość , jeśli nie może rozpoznać zestawu. Jeśli zestaw zostanie rozwiązany, Assembly.GetType(String, Boolean, Boolean) przeciążenie metody jest używane do ładowania typu z zestawu; w przeciwnym razie nie ma próby rozpoznania typu.
typ, zestaw null podano Odpowiednik konwertowania nazwy zestawu na AssemblyName obiekt i wywoływania Assembly.Load(AssemblyName) przeciążenia metody w celu pobrania zestawu. Jeśli zestaw zostanie rozwiązany, zostanie przekazany do typeResolver; w przeciwnym razie typeResolver nie jest wywoływany i nie ma dalszych prób rozpoznania typu.
typ, zestaw podano podano assemblyResolver zwraca zestaw lub zwraca null wartość , jeśli nie może rozpoznać zestawu. Jeśli zestaw zostanie rozwiązany, zostanie przekazany do typeResolver; w przeciwnym razie typeResolver nie jest wywoływany i nie ma dalszych prób rozpoznania typu.
typ wartość NULL, podana null Odpowiednik wywoływania Type.GetType(String, Boolean, Boolean) przeciążenia metody. Ponieważ nazwa zestawu nie jest podana, wyszukiwane są tylko mscorlib.dll/System.Private.CoreLib.dll i aktualnie wykonywany zestaw. Jeśli assemblyResolver zostanie podana wartość , zostanie ona zignorowana.
typ wartość NULL, podana podano typeResolver jest wywoływana i null jest przekazywana dla zestawu. typeResolver może dostarczyć typ z dowolnego zestawu, w tym zestawy ładowane do tego celu. Jeśli assemblyResolver zostanie podana wartość , zostanie ona zignorowana.
zestaw wartość NULL, podana wartość NULL, podana Element FileLoadException jest zgłaszany, ponieważ nazwa zestawu jest analizowana tak, jakby była nazwą typu kwalifikowanego przez zestaw. Powoduje to nieprawidłową nazwę zestawu.

Powrót do: Uwagi dotyczące użycia, rozpoznawanie zestawów, rozpoznawanie typów.

Dotyczy