Type.GetType Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
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 assemblyResolver
AssemblyName 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.
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
true
aby wykonać wyszukiwanie typeName
bez 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-
typeName
reprezentuje 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.
typeName
reprezentuje 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. |
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.
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.
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ż
- String
- TypeLoadException
- AssemblyQualifiedName
- GetAssembly(Type)
- GetType(String)
- AssemblyName
- Określanie w pełni kwalifikowanych nazw typów
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ć null
wartość . 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-
typeName
reprezentuje 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 typeName
pliku . 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 null
wartość .
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. |
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.
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.
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ż
- String
- TypeLoadException
- AssemblyQualifiedName
- GetAssembly(Type)
- GetType(String)
- AssemblyName
- Określanie w pełni kwalifikowanych nazw typów
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
true
aby wykonać wyszukiwanie typeName
bez 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-
typeName
reprezentuje 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. |
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.
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.
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ż
- String
- TypeLoadException
- AssemblyQualifiedName
- GetAssembly(Type)
- GetType(String)
- AssemblyName
- Określanie w pełni kwalifikowanych nazw typów
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 assemblyResolver
AssemblyName 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.
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.
typeName
reprezentuje 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 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 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.
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ć null
wartość . 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-
typeName
reprezentuje 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
.