Udostępnij za pośrednictwem


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 niestandardowe metody rozpoznawania zestawu i typu.

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)

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.

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 podając niestandardowe metody rozpoznawania zestawu i typu.

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

Pobiera typ o określonej nazwie, 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)

Źródło:
Type.CoreCLR.cs
Źródło:
Type.CoreCLR.cs
Źródło:
Type.CoreCLR.cs

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 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 być rozpoznawany. assemblyResolver Jeśli parametr jest podany lub jeśli jest używana rozdzielczość typu standardowego, typeName musi być nazwą kwalifikowaną zestawu (zobacz AssemblyQualifiedName), chyba że typ znajduje się w aktualnie wykonywanym zestawie lub w mscorlib.dll/System.Private.CoreLib.dll, w tym przypadku wystarczy podać nazwę typu kwalifikowaną przez jego przestrzeń nazw.

assemblyResolver
Func<AssemblyName,Assembly>

Metoda, która lokalizuje i zwraca zestaw określony w pliku typeName. Nazwa zestawu jest przekazywana jako assemblyResolverAssemblyName obiekt. Jeśli typeName nie zawiera nazwy zestawu, assemblyResolver nie jest wywoływana. Jeśli assemblyResolver nie zostanie dostarczona, zostanie wykonana rozdzielczość zestawu standardowego.

Uwaga: nie przekazuj metod z 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 zestaw nie zostanie podany, metoda może go dostarczyć. Metoda przyjmuje również parametr, który określa, czy przeprowadzić wyszukiwanie bez uwzględniania wielkości liter; wartość parametru jest przekazywana do tego parametru ignoreCase .

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

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

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

-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 dodatkowe uwagi dotyczące interfejsu API dla type.GetType.

Dotyczy

GetType()

Źródło:
Type.cs
Źródło:
Type.cs
Źródło:
Type.cs

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

Bieżąca klasa Type.

Implementuje

Wyjątki

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

Zobacz też

Dotyczy

GetType(String)

Źródło:
Type.CoreCLR.cs
Źródło:
Type.CoreCLR.cs
Źródło:
Type.CoreCLR.cs

Type Pobiera element o określonej nazwie, wykonując wyszukiwanie z uwzględnieniem wielkości 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: . 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 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.

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 biblioteki klas przenośnych 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ż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.

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

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

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 zestawu. 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 poprzedzać 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)

Źródło:
Type.CoreCLR.cs
Źródło:
Type.CoreCLR.cs
Źródło:
Type.CoreCLR.cs

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

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-

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

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

Zestaw lub jedna z jego zależności nie jest prawidł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ż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: .

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 zestawu. 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 poprzedzać 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 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, Boolean, Boolean)

Źródło:
Type.CoreCLR.cs
Źródło:
Type.CoreCLR.cs
Źródło:
Type.CoreCLR.cs

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

throwOnError typeName 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 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ę 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, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>)

Źródło:
Type.CoreCLR.cs
Źródło:
Type.CoreCLR.cs
Źródło:
Type.CoreCLR.cs

Pobiera typ o określonej nazwie, 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);
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 być rozpoznawany. assemblyResolver Jeśli parametr jest podany lub jeśli jest używana rozdzielczość typu standardowego, typeName musi być nazwą kwalifikowaną zestawu (zobacz AssemblyQualifiedName), chyba że typ znajduje się w aktualnie wykonywanym zestawie lub w mscorlib.dll/System.Private.CoreLib.dll, w tym przypadku wystarczy podać nazwę typu kwalifikowaną przez jego przestrzeń nazw.

assemblyResolver
Func<AssemblyName,Assembly>

Metoda, która lokalizuje i zwraca zestaw określony w pliku typeName. Nazwa zestawu jest przekazywana jako assemblyResolverAssemblyName obiekt. Jeśli typeName nie zawiera nazwy zestawu, assemblyResolver nie jest wywoływana. Jeśli assemblyResolver nie zostanie dostarczona, zostanie wykonana rozdzielczość zestawu standardowego.

Uwaga: nie przekazuj metod z 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 zestaw nie zostanie podany, typeResolver metoda może go dostarczyć. Metoda przyjmuje również parametr, który określa, czy przeprowadzić wyszukiwanie bez uwzględniania wielkości liter; false parametr jest przekazywany do tego parametru.

Uwaga: nie przekazuj metod z nieznanych lub 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 nazwa prostego typu zawiera niewyobrażany 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 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.

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 jest nieprawidłowa dla aktualnie załadowanego środowiska uruchomieniowego.

Uwagi

Scenariusze użycia dla tej metody oraz 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 go odnaleźć, wywołanie GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>) 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.

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)

Źródło:
Type.CoreCLR.cs
Źródło:
Type.CoreCLR.cs
Źródło:
Type.CoreCLR.cs

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