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() |
Pobiera bieżący element Type. |
GetType(String) |
Type Pobiera element o określonej nazwie, wykonując wyszukiwanie z uwzględnieniem wielkości liter. |
GetType(String, Boolean) |
Type Pobiera element o określonej nazwie, wykonując wyszukiwanie z uwzględnieniem wielkości liter i określając, czy zgłosić wyjątek, jeśli typ nie zostanie znaleziony. |
GetType(String, Boolean, Boolean) |
Pobiera element Type z określoną nazwą, określając, czy zgłosić wyjątek, jeśli typ nie zostanie znaleziony i czy ma być wykonywane wyszukiwanie w przypadku. |
GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>) |
Pobiera typ o określonej nazwie, opcjonalnie udostępniając metody niestandardowe do rozpoznawania zestawu i typu. |
GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean) |
Pobiera typ z określoną nazwą, określając, czy zgłosić wyjątek, jeśli typ nie zostanie znaleziony, i opcjonalnie podaj niestandardowe metody rozpoznawania zestawu i typu. |
GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) |
Pobiera typ z określoną nazwą, określając, czy przeprowadzić wyszukiwanie uwzględniające wielkość liter i czy zgłosić wyjątek, jeśli typ nie zostanie znaleziony, i opcjonalnie podając niestandardowe metody rozpoznawania zestawu i typu. |
GetType()
Pobiera bieżący element Type.
public:
Type ^ GetType();
public:
virtual Type ^ GetType();
public Type GetType ();
override this.GetType : unit -> Type
Public Function GetType () As Type
Zwraca
Bieżąca klasa Type.
Implementuje
Wyjątki
Inicjator klasy jest wywoływany i zgłasza wyjątek.
Zobacz też
Dotyczy
GetType(String)
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
Kwalifikowana nazwa zestawu typu do pobrania. Zobacz: . Jeśli typ znajduje się w aktualnie wykonywanym zestawie lub w mscorlib.dll/System.Private.CoreLib.dll, wystarczy podać nazwę typu kwalifikowaną przez jego przestrzeń nazw.
Zwraca
Typ o określonej nazwie, jeśli zostanie znaleziony; w przeciwnym razie , null
.
Wyjątki
typeName
to null
.
Inicjator klasy jest wywoływany i zgłasza wyjątek.
typeName
reprezentuje typ ogólny, który ma typ wskaźnika, ByRef
typ lub Void jako jeden z argumentów typu.
-lub-
typeName
reprezentuje typ ogólny, który ma nieprawidłową liczbę argumentów typu.
-lub-
typeName
reprezentuje typ ogólny, a jeden z jego argumentów typu nie spełnia ograniczeń dla odpowiedniego parametru typu.
typeName
reprezentuje tablicę .TypedReference
Zestaw lub jeden z jego elementów zależnych został znaleziony, ale nie można go załadować.
Uwaga: na platformie .NET dla aplikacji ze Sklepu Windows lub przenośnej biblioteki klas przechwyć wyjątek klasy bazowej , IOExceptionzamiast tego.
Zestaw lub jeden z jego elementów zależnych nie są prawidłowe.
-lub-
Wersja 2.0 lub nowsza środowiska uruchomieniowego języka wspólnego jest obecnie ładowana, a zestaw został skompilowany z nowszą wersją.
Przykłady
Poniższy przykład pobiera typ System.Int32
obiektu i używa tego typu obiektu do wyświetlenia FullName właściwości System.Int32
.
using namespace System;
int main()
{
try {
// Get the type of a specified class.
Type^ myType1 = Type::GetType( "System.Int32" );
Console::WriteLine( "The full name is {0}.\n", myType1->FullName );
}
catch ( TypeLoadException^ e ) {
Console::WriteLine("{0}: Unable to load type System.Int32",
e->GetType()->Name);
}
try {
// Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
Type^ myType2 = Type::GetType( "NoneSuch", true );
Console::WriteLine( "The full name is {0}.", myType2->FullName );
}
catch ( TypeLoadException^ e ) {
Console::WriteLine("{0}: Unable to load type NoneSuch",
e->GetType()->Name);
}
}
// The example displays the following output:
// The full name is System.Int32.
//
// TypeLoadException: Unable to load type NoneSuch
using System;
class Example
{
public static void Main()
{
try {
// Get the type of a specified class.
Type myType1 = Type.GetType("System.Int32");
Console.WriteLine("The full name is {0}.\n", myType1.FullName);
}
catch (TypeLoadException e)
{
Console.WriteLine("{0}: Unable to load type System.Int32", e.GetType().Name);
}
try {
// Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
Type myType2 = Type.GetType("NoneSuch", true);
Console.WriteLine("The full name is {0}.", myType2.FullName);
}
catch(TypeLoadException e) {
Console.WriteLine("{0}: Unable to load type NoneSuch", e.GetType().Name);
}
}
}
// The example displays the following output:
// The full name is System.Int32.
//
// TypeLoadException: Unable to load type NoneSuch
open System
try
// Get the type of a specified class.
let myType1 = Type.GetType "System.Int32"
printfn $"The full name is {myType1.FullName}.\n"
with :? TypeLoadException as e ->
printfn $"{e.GetType().Name}: Unable to load type System.Int32"
try
// Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
let myType2 = Type.GetType("NoneSuch", true)
printfn $"The full name is {myType2.FullName}."
with :? TypeLoadException as e ->
printfn $"{e.GetType().Name}: Unable to load type NoneSuch"
// The example displays the following output:
// The full name is System.Int32.
//
// TypeLoadException: Unable to load type NoneSuch
Class Example
Public Shared Sub Main()
Try
' Get the type of the specified class.
Dim myType1 As Type = Type.GetType("System.Int32")
Console.WriteLine("The full name is {0}.", myType1.FullName)
Catch e As TypeLoadException
Console.WriteLine("{0}: Unable to load type System.Int32",
e.GetType().Name)
End Try
Console.WriteLine()
Try
' Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
Dim myType2 As Type = Type.GetType("NoneSuch", True)
Console.WriteLine("The full name is {0}.", myType2.FullName)
Catch e As TypeLoadException
Console.WriteLine("{0}: Unable to load type NoneSuch", e.GetType().Name)
End Try
End Sub
End Class
' The example displays the following output:
' The full name is System.Int32.
'
' TypeLoadException: Unable to load type NoneSuch
Uwagi
Moż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.
Uwaga
Jeśli typeName
nie można odnaleźć, wywołanie GetType(String) metody zwraca null
wartość . Nie zgłasza wyjątku. Aby kontrolować, czy zgłaszany jest wyjątek, wywołaj przeciążenie GetType metody, która ma throwOnError
parametr.
GetType działa tylko w przypadku zestawów załadowanych z dysku. Jeśli wywołasz wywołanie GetType wyszukiwania typu zdefiniowanego w zestawie dynamicznym zdefiniowanym przy użyciu System.Reflection.Emit usług, może wystąpić niespójne zachowanie. Zachowanie zależy od tego, czy zestaw dynamiczny jest trwały, czyli tworzony przy użyciu RunAndSave
trybów dostępu lub Save
wyliczenia System.Reflection.Emit.AssemblyBuilderAccess . Jeśli zestaw dynamiczny jest trwały i został zapisany na dysku przed GetType
wywołaniem, moduł ładujący znajdzie zapisany zestaw na dysku, ładuje ten zestaw i pobiera typ z tego zestawu. Jeśli zestaw nie został zapisany na dysku po GetType
wywołaniu, metoda zwraca 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.
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
W wersji 2.0 środowiska .NET Framework architektura procesora jest dodawana do tożsamości zestawu i może być określona jako część zestawu ciągu nazw. Na przykład "ProcessorArchitecture = msil". Jednak nie jest on uwzględniany w ciągu zwracanym przez AssemblyQualifiedName właściwość ze względów zgodności. Można również załadować typy, tworząc AssemblyName obiekt i przekazując go do odpowiedniego Load przeciążenia metody. Następnie można użyć metody do załadowania Assembly.GetType typów z zestawu. Zobacz też AssemblyName.ProcessorArchitecture.
Ogranicznik | Znaczenie |
---|---|
Ukośnik odwrotny (\) | Znak ucieczki. |
Backtick (') | Poprzedza co najmniej jedną cyfrę reprezentującą liczbę parametrów typu znajdujących się na końcu nazwy typu ogólnego. |
Nawiasy kwadratowe ([]) | Dołącz listę argumentów typu ogólnego dla skonstruowanego typu ogólnego; w obrębie listy argumentów typu należy ująć typ kwalifikowany przez zestaw. |
Przecinek (,) | Poprzedza nazwę zestawu. |
Kropka (.) | Wskazuje przestrzeń nazw identyfikatorów. |
Znak plus (+) | Poprzedza klasę zagnieżdżoną. |
Na przykład w pełni kwalifikowana nazwa klasy może wyglądać następująco:
TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly
Jeśli przestrzeń nazw to TopNamespace.Sub+Namespace, ciąg musiałby poprzedzić znak plus (+) znakiem ucieczki (\), aby zapobiec interpretowaniu go jako separatora zagnieżdżania. Odbicie emituje ten ciąg w następujący sposób:
TopNamespace.Sub\+Namespace.ContainingClass+NestedClass,MyAssembly
Znak "++" staje się "\+\+", a znak "\" staje się "\\".
Ta kwalifikowana nazwa może być utrwalana, a później używana do załadowania elementu Type. Aby wyszukać i załadować element Type, użyj GetType polecenia tylko z nazwą typu lub nazwą kwalifikowanego typu zestawu. GetType z nazwą typu będzie szukać Type tylko w zestawie obiektu wywołującego, a następnie w zestawie systemowym. GetType z kwalifikowaną nazwą typu zestawu będzie szukać Type w dowolnym zestawie.
Nazwy typów mogą obejmować końcowe znaki, które wyznaczają dodatkowe informacje dotyczące typu, na przykład to, czy typ jest typem odwołania, typem wskaźnika lub typem tablicowym. Aby pobrać nazwę typu bez tych znaków końcowych, użyj metody t.GetElementType().ToString()
, gdzie t
jest typem.
Spacje są istotne we wszystkich składnikach nazwy z wyjątkiem nazwy zestawu. Spacje przed separatorem w nazwie zestawu ',' są istotne, ale spacje po separatorze ',' są ignorowane.
Nazwa typu ogólnego kończy się backtick ('), po którym następują cyfry reprezentujące liczbę argumentów typu ogólnego. Celem tej nazwy jest umożliwienie kompilatorom obsługi typów ogólnych o tej samej nazwie, ale z różnymi liczbami parametrów typu występującymi w tym samym zakresie. Na przykład odbicie zwraca nazwy Tuple`1
mangled i Tuple`2
z metod Tuple(Of T)
ogólnych i Tuple(Of T0, T1)
w Visual Basic lub Tuple<T>
Tuple<T0, T1>
w Visual C#.
W przypadku typów ogólnych lista argumentów typu jest ujęta w nawiasy, a argumenty typu są rozdzielane przecinkami. Na przykład ogólny Dictionary<TKey,TValue> ma dwa parametry typu. MyType
Element Dictionary<TKey,TValue> z kluczami typu String może być reprezentowany w następujący sposób:
System.Collections.Generic.Dictionary`2[System.String,MyType]
Aby określić typ kwalifikowany do zestawu na liście argumentów typu, należy ująć typ kwalifikowany przez zestaw w nawiasy. W przeciwnym razie przecinki oddzielające części nazwy kwalifikowanej przez zestaw są interpretowane jako rozdzielanie dodatkowych argumentów typu. Na przykład fromMyAssembly.dll Dictionary<TKey,TValue>MyType
z kluczami typu Stringmożna określić w następujący sposób:
Type.GetType("System.Collections.Generic.Dictionary`2[System.String,[MyType,MyAssembly]]")
Uwaga
Typ kwalifikowany do zestawu można ujęć w nawiasy tylko wtedy, gdy pojawia się on na liście parametrów typu. Reguły wyszukiwania zestawów dla kwalifikowanych i niekwalifikowanych typów na listach parametrów typów są takie same jak reguły dla kwalifikowanych i niekwalifikowanych typów niegenerowanych.
Typy dopuszczane do wartości null to specjalny przypadek typów ogólnych. Na przykład wartość null może być reprezentowana przez ciąg "System.Nullable'1 Int32 [System.Int32]".
Uwaga
W języku C#, C++i Visual Basic można również uzyskać typy dopuszczane do wartości null przy użyciu operatorów typów. Na przykład typ dopuszczający Boolean wartość null jest zwracany w typeof(Nullable<bool>)
języku C#, w Nullable<Boolean>::typeid
języku C++, a w GetType(Nullable(Of Boolean))
Visual Basic.
W poniższej tabeli przedstawiono składnię używaną z różnymi typami GetType
.
Aby uzyskać | Zastosowanie |
---|---|
Dopuszczana wartość null Int32 | Type.GetType("System.Nullable`1[System.Int32]") |
Wskaźnik niezarządzany do MyType |
Type.GetType("MyType*") |
Wskaźnik niezarządzany do wskaźnika do MyType |
Type.GetType("MyType**") |
Wskaźnik zarządzany lub odwołanie do MyType |
Type.GetType("MyType&") . Należy pamiętać, że w przeciwieństwie do wskaźników odwołania są ograniczone do jednego poziomu. |
Klasa nadrzędna i zagnieżdżona klasa | Type.GetType("MyParentClass+MyNestedClass") |
Tablica jednowymiarowa z dolną granicą 0 | Type.GetType("MyType[]") |
Tablica jednowymiarowa z nieznaną dolną granicą | Type.GetType("MyType[*]") |
Tablica nwymiarowa | Przecinek (,) wewnątrz nawiasów łącznie n-1 razy. Na przykład System.Object[,,] reprezentuje tablicę trójwymiarową Object . |
Tablica tablic jednowymiarowych | Type.GetType("MyType[][]") |
Prostokątna dwuwymiarowa tablica z nieznanymi dolnymi granicami | Type.GetType("MyType[,]") |
Typ ogólny z jednym argumentem typu | Type.GetType("MyGenericType`1[MyType]") |
Typ ogólny z dwoma argumentami typu | Type.GetType("MyGenericType`2[MyType,AnotherType]") |
Typ ogólny z dwoma argumentami typu kwalifikowanego zestawu | Type.GetType("MyGenericType`2[[MyType,MyAssembly],[AnotherType,AnotherAssembly]]") |
Kwalifikowany typ ogólny zestawu z argumentem typu kwalifikowanego przez zestaw | Type.GetType("MyGenericType`1[[MyType,MyAssembly]],MyGenericTypeAssembly") |
Typ ogólny, którego argument typu jest typem ogólnym z dwoma argumentami typu | Type.GetType("MyGenericType`1[AnotherGenericType`2[MyType,AnotherType]]") |
Zobacz też
- String
- TypeLoadException
- AssemblyQualifiedName
- GetAssembly(Type)
- GetType(String)
- AssemblyName
- Określanie w pełni kwalifikowanych nazw typów
Dotyczy
GetType(String, Boolean)
Pobiera element Type z określoną nazwą, wykonując wyszukiwanie uwzględniające wielkość liter i określając, czy zgłosić wyjątek, jeśli typ nie zostanie znaleziony.
public:
static Type ^ GetType(System::String ^ typeName, bool throwOnError);
public static Type GetType (string typeName, bool throwOnError);
public static Type? GetType (string typeName, bool throwOnError);
static member GetType : string * bool -> Type
Public Shared Function GetType (typeName As String, throwOnError As Boolean) As Type
Parametry
- typeName
- String
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, 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 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 jeden z jego elementów zależnych nie są prawidłowe.
-lub-
Wersja 2.0 lub nowsza środowiska uruchomieniowego języka wspólnego jest obecnie ładowana, a zestaw został skompilowany z nowszą wersją.
Przykłady
Poniższy przykład pobiera typ System.Int32
obiektu i używa tego typu obiektu do wyświetlenia FullName właściwości System.Int32
. 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
W wersji 2.0 środowiska .NET Framework architektura procesora jest dodawana do tożsamości zestawu i może być określona jako część zestawu ciągu nazw. Na przykład "ProcessorArchitecture = msil". Jednak nie jest on uwzględniany w ciągu zwracanym przez AssemblyQualifiedName właściwość ze względów zgodności. Można również załadować typy, tworząc AssemblyName obiekt i przekazując go do odpowiedniego Load przeciążenia metody. Następnie można użyć metody do załadowania Assembly.GetType typów z zestawu. Zobacz też AssemblyName.ProcessorArchitecture.
Ogranicznik | Znaczenie |
---|---|
Ukośnik odwrotny (\) | Znak ucieczki. |
Backtick (') | Poprzedza co najmniej jedną cyfrę reprezentującą liczbę parametrów typu znajdujących się na końcu nazwy typu ogólnego. |
Nawiasy kwadratowe ([]) | Dołącz listę argumentów typu ogólnego dla skonstruowanego typu ogólnego; w obrębie listy argumentów typu należy ująć typ kwalifikowany przez zestaw. |
Przecinek (,) | Poprzedza nazwę zestawu. |
Kropka (.) | Wskazuje przestrzeń nazw identyfikatorów. |
Znak plus (+) | Poprzedza klasę zagnieżdżoną. |
Na przykład w pełni kwalifikowana nazwa klasy może wyglądać następująco:
TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly
Jeśli przestrzeń nazw to TopNamespace.Sub+Namespace, ciąg musiałby poprzedzić znak plus (+) znakiem ucieczki (\), aby zapobiec interpretowaniu go jako separatora zagnieżdżania. Odbicie emituje ten ciąg w następujący sposób:
TopNamespace.Sub\+Namespace.ContainingClass+NestedClass,MyAssembly
Znak "++" staje się "\+\+", a znak "\" staje się "\\".
Ta kwalifikowana nazwa może być utrwalana, a później używana do załadowania elementu Type. Aby wyszukać i załadować element Type, użyj GetType polecenia tylko z nazwą typu lub nazwą kwalifikowanego typu zestawu. GetType z nazwą typu będzie szukać Type tylko w zestawie obiektu wywołującego, a następnie w zestawie systemowym. GetType z kwalifikowaną nazwą typu zestawu będzie szukać Type w dowolnym zestawie.
Nazwy typów mogą obejmować końcowe znaki, które wyznaczają dodatkowe informacje dotyczące typu, na przykład to, czy typ jest typem odwołania, typem wskaźnika lub typem tablicowym. Aby pobrać nazwę typu bez tych znaków końcowych, użyj metody t.GetElementType().ToString()
, gdzie t
jest typem.
Spacje są istotne we wszystkich składnikach nazwy z wyjątkiem nazwy zestawu. Spacje przed separatorem w nazwie zestawu ',' są istotne, ale spacje po separatorze ',' są ignorowane.
Nazwa typu ogólnego kończy się backtick ('), po którym następują cyfry reprezentujące liczbę argumentów typu ogólnego. Celem tej nazwy jest umożliwienie kompilatorom obsługi typów ogólnych o tej samej nazwie, ale z różnymi liczbami parametrów typu występującymi w tym samym zakresie. Na przykład odbicie zwraca nazwy Tuple`1
mangled i Tuple`2
z metod Tuple(Of T)
ogólnych i Tuple(Of T0, T1)
w Visual Basic lub Tuple<T>
Tuple<T0, T1>
w Visual C#.
W przypadku typów ogólnych lista argumentów typu jest ujęta w nawiasy, a argumenty typu są rozdzielane przecinkami. Na przykład ogólny Dictionary<TKey,TValue> ma dwa parametry typu. MyType
Element Dictionary<TKey,TValue> z kluczami typu String może być reprezentowany w następujący sposób:
System.Collections.Generic.Dictionary`2[System.String,MyType]
Aby określić typ kwalifikowany do zestawu na liście argumentów typu, należy ująć typ kwalifikowany przez zestaw w nawiasy. W przeciwnym razie przecinki oddzielające części nazwy kwalifikowanej przez zestaw są interpretowane jako rozdzielanie dodatkowych argumentów typu. Na przykład 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
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, Boolean, Boolean)
Pobiera element Type z określoną nazwą, określając, czy zgłosić wyjątek, jeśli typ nie zostanie znaleziony i czy ma być wykonywane wyszukiwanie w przypadku.
public:
static Type ^ GetType(System::String ^ typeName, bool throwOnError, bool ignoreCase);
public static Type GetType (string typeName, bool throwOnError, bool ignoreCase);
public static Type? GetType (string typeName, bool throwOnError, bool ignoreCase);
static member GetType : string * bool * bool -> Type
Public Shared Function GetType (typeName As String, throwOnError As Boolean, ignoreCase As Boolean) As Type
Parametry
- typeName
- String
Nazwa kwalifikowana zestawu typu do pobrania. Zobacz: . Jeśli typ znajduje się w aktualnie wykonywanym zestawie lub w mscorlib.dll/System.Private.CoreLib.dll, wystarczy podać nazwę typu kwalifikowaną przez jego przestrzeń nazw.
- throwOnError
- Boolean
true
zgłosić wyjątek, jeśli nie można odnaleźć typu; false
, aby zwrócić wartość null
. Określenie false
powoduje również pominięcie niektórych innych warunków wyjątku, ale nie wszystkich z nich. Zobacz sekcję Wyjątki.
- ignoreCase
- Boolean
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, 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
throwOnError
jest true
i typeName
zawiera nieprawidłową składnię. Na przykład "MyType[,*,]".
-lub-
typeName
reprezentuje typ ogólny, który ma typ wskaźnika, ByRef
typ lub Void jako jeden z argumentów typu.
-lub-
typeName
reprezentuje typ ogólny, który ma niepoprawną liczbę argumentów typu.
-lub-
typeName
reprezentuje typ ogólny, a jeden z argumentów typu nie spełnia ograniczeń dla odpowiedniego parametru typu.
throwOnError
jest true
i zestaw lub jeden z jego zależności nie został znaleziony.
Zestaw lub jeden z jego elementów zależnych został znaleziony, ale nie można go załadować.
Zestaw lub jeden z jego elementów zależnych nie są prawidłowe.
-lub-
Wersja 2.0 lub nowsza środowiska uruchomieniowego języka wspólnego jest obecnie ładowana, a zestaw został skompilowany przy użyciu nowszej wersji.
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 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. Wszystkie kompilatory, które obsługują aparat plików wykonywalnych języka wspólnego, w trakcie wykonania wyemitują prostą nazwę klasy zagnieżdżonej, a odbicie podczas kwerendy stworzy zniekształcone nazwy zgodnie z następującymi konwencjami.
Uwaga
W wersji 2.0 środowiska .NET Framework architektura procesora jest dodawana do tożsamości zestawu i może być określona jako część zestawu ciągu nazw. Na przykład "ProcessorArchitecture = msil". Jednak nie jest on uwzględniany w ciągu zwracanym przez AssemblyQualifiedName właściwość ze względów zgodności. Można również załadować typy, tworząc AssemblyName obiekt i przekazując go do odpowiedniego Load przeciążenia metody. Następnie można użyć metody do załadowania Assembly.GetType typów z zestawu. Zobacz też AssemblyName.ProcessorArchitecture.
Ogranicznik | Znaczenie |
---|---|
Ukośnik odwrotny (\) | Znak ucieczki. |
Backtick (') | Poprzedza co najmniej jedną cyfrę reprezentującą liczbę parametrów typu znajdujących się na końcu nazwy typu ogólnego. |
Nawiasy kwadratowe ([]) | Dołącz listę argumentów typu ogólnego dla skonstruowanego typu ogólnego; w obrębie listy argumentów typu należy ująć typ kwalifikowany przez zestaw. |
Przecinek (,) | Poprzedza nazwę zestawu. |
Kropka (.) | Wskazuje przestrzeń nazw identyfikatorów. |
Znak plus (+) | Poprzedza klasę zagnieżdżoną. |
Na przykład w pełni kwalifikowana nazwa klasy może wyglądać następująco:
TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly
Jeśli przestrzeń nazw to TopNamespace.Sub+Namespace, ciąg musiałby poprzedzić znak plus (+) znakiem ucieczki (\), aby zapobiec interpretowaniu go jako separatora zagnieżdżania. Odbicie emituje ten ciąg w następujący sposób:
TopNamespace.Sub\+Namespace.ContainingClass+NestedClass,MyAssembly
Znak "++" staje się "\+\+", a znak "\" staje się "\\".
Ta kwalifikowana nazwa może być utrwalana, a później używana do załadowania elementu Type. Aby wyszukać i załadować element Type, użyj GetType polecenia tylko z nazwą typu lub nazwą kwalifikowanego typu zestawu. GetType z nazwą typu będzie szukać Type tylko w zestawie obiektu wywołującego, a następnie w zestawie systemowym. GetType z kwalifikowaną nazwą typu zestawu będzie szukać Type w dowolnym zestawie.
Nazwy typów mogą obejmować końcowe znaki, które wyznaczają dodatkowe informacje dotyczące typu, na przykład to, czy typ jest typem odwołania, typem wskaźnika lub typem tablicowym. Aby pobrać nazwę typu bez tych znaków końcowych, użyj metody t.GetElementType().ToString()
, gdzie t
jest typem.
Spacje są istotne we wszystkich składnikach nazwy z wyjątkiem nazwy zestawu. Spacje przed separatorem w nazwie zestawu ',' są istotne, ale spacje po separatorze ',' są ignorowane.
Nazwa typu ogólnego kończy się backtick ('), po którym następują cyfry reprezentujące liczbę argumentów typu ogólnego. Celem tej nazwy jest umożliwienie kompilatorom obsługi typów ogólnych o tej samej nazwie, ale z różnymi liczbami parametrów typu występującymi w tym samym zakresie. Na przykład odbicie zwraca nazwy Tuple`1
mangled i Tuple`2
z metod Tuple(Of T)
ogólnych i Tuple(Of T0, T1)
w Visual Basic lub Tuple<T>
Tuple<T0, T1>
w Visual C#.
W przypadku typów ogólnych lista argumentów typu jest ujęta w nawiasy, a argumenty typu są rozdzielane przecinkami. Na przykład ogólny Dictionary<TKey,TValue> ma dwa parametry typu. MyType
Element Dictionary<TKey,TValue> z kluczami typu String może być reprezentowany w następujący sposób:
System.Collections.Generic.Dictionary`2[System.String,MyType]
Aby określić typ kwalifikowany do zestawu na liście argumentów typu, należy ująć typ kwalifikowany przez zestaw w nawiasy. W przeciwnym razie przecinki oddzielające części nazwy kwalifikowanej przez zestaw są interpretowane jako rozdzielanie dodatkowych argumentów typu. Na przykład 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, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>)
Pobiera typ o określonej nazwie, opcjonalnie udostępniając metody niestandardowe do rozpoznawania zestawu i typu.
public:
static Type ^ GetType(System::String ^ typeName, Func<System::Reflection::AssemblyName ^, System::Reflection::Assembly ^> ^ assemblyResolver, Func<System::Reflection::Assembly ^, System::String ^, bool, Type ^> ^ typeResolver);
public static Type? GetType (string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly?>? assemblyResolver, Func<System.Reflection.Assembly?,string,bool,Type?>? typeResolver);
public static Type GetType (string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly> assemblyResolver, Func<System.Reflection.Assembly,string,bool,Type> typeResolver);
static member GetType : string * Func<System.Reflection.AssemblyName, System.Reflection.Assembly> * Func<System.Reflection.Assembly, string, bool, Type> -> Type
Public Shared Function GetType (typeName As String, assemblyResolver As Func(Of AssemblyName, Assembly), typeResolver As Func(Of Assembly, String, Boolean, Type)) As Type
Parametry
- typeName
- String
Nazwa typu do pobrania. typeResolver
Jeśli parametr jest podany, nazwa typu może być dowolnym ciągiem, który typeResolver
jest w stanie rozpoznać. assemblyResolver
Jeśli parametr jest podany lub jeśli jest używana standardowa rozdzielczość typu, typeName
musi być kwalifikowaną nazwą zestawu (patrz AssemblyQualifiedName), chyba że typ znajduje się w aktualnie wykonywanym zestawie lub w mscorlib.dll/System.Private.CoreLib.dll, w którym przypadku wystarczy podać nazwę typu kwalifikowaną przez jego przestrzeń nazw.
- assemblyResolver
- Func<AssemblyName,Assembly>
Metoda, która lokalizuje i zwraca zestaw określony w elemecie typeName
. Nazwa zestawu jest przekazywana jako assemblyResolver
AssemblyName obiekt. Jeśli typeName
nie zawiera nazwy zestawu, assemblyResolver
nie jest wywoływana. Jeśli assemblyResolver
nie podano, jest wykonywana standardowa rozdzielczość zestawu.
Uwaga Nie przekazuj metod nieznanych lub niezaufanych wywołujących. Może to spowodować podniesienie uprawnień dla złośliwego kodu. Użyj tylko określonych przez siebie metod lub tych, które znasz.
Metoda, która lokalizuje i zwraca typ określony przez typeName
zestaw zwracany przez assemblyResolver
lub przez standardową rozdzielczość zestawu. Jeśli nie podano zestawu, typeResolver
metoda może go podać. Metoda przyjmuje również parametr określający, czy przeprowadzić wyszukiwanie bez uwzględniania wielkości liter; false
jest przekazywany do tego parametru.
Uwaga Nie przekazuj metod nieznanych lub niezaufanych wywołujących.
Zwraca
Typ o określonej nazwie lub null
jeśli typ nie zostanie znaleziony.
Wyjątki
typeName
to null
.
Inicjator klasy jest wywoływany i zgłasza wyjątek.
Błąd występuje, gdy typeName
jest analizowany w nazwie typu i nazwie zestawu (na przykład gdy prosta nazwa typu zawiera niewyrażony znak specjalny).
-lub-
typeName
reprezentuje typ ogólny, który ma typ wskaźnika, ByRef
typ lub Void jako jeden z argumentów typu.
-lub-
typeName
reprezentuje typ ogólny, który ma nieprawidłową liczbę argumentów typu.
-lub-
typeName
reprezentuje typ ogólny, a jeden z jego argumentów typu nie spełnia ograniczeń dla odpowiedniego parametru typu.
typeName
reprezentuje tablicę .TypedReference
Zestaw lub jeden z jego elementów zależnych został znaleziony, ale nie można go załadować.
-lub-
typeName
zawiera nieprawidłową nazwę zestawu.
-lub-
typeName
jest prawidłową nazwą zestawu bez nazwy typu.
Zestaw lub jeden z jego elementów zależnych nie są prawidłowe.
-lub-
Zestaw został skompilowany przy użyciu nowszej wersji aparatu plików wykonywalnych języka wspólnego niż wersja, która jest aktualnie załadowana.
Uwagi
Scenariusze użycia dla tej metody i szczegółowe informacje o assemblyResolver
parametrach i typeResolver
można znaleźć w przeciążeniu GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) metody .
Uwaga
Jeśli typeName
nie można odnaleźć, wywołanie GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>) metody zwraca null
wartość . Nie zgłasza wyjątku. Aby kontrolować, czy zgłaszany jest wyjątek, wywołaj przeciążenie GetType metody, która ma throwOnError
parametr.
Wywoływanie tego przeciążenia metody jest takie samo jak wywoływanie GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) przeciążenia metody i określanie false
parametrów throwOnError
i ignoreCase
.
Dotyczy
GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean)
Pobiera typ z określoną nazwą, określając, czy zgłosić wyjątek, jeśli typ nie zostanie znaleziony, i opcjonalnie podaj niestandardowe metody rozpoznawania zestawu i typu.
public:
static Type ^ GetType(System::String ^ typeName, Func<System::Reflection::AssemblyName ^, System::Reflection::Assembly ^> ^ assemblyResolver, Func<System::Reflection::Assembly ^, System::String ^, bool, Type ^> ^ typeResolver, bool throwOnError);
public static Type? GetType (string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly?>? assemblyResolver, Func<System.Reflection.Assembly?,string,bool,Type?>? typeResolver, bool throwOnError);
public static Type GetType (string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly> assemblyResolver, Func<System.Reflection.Assembly,string,bool,Type> typeResolver, bool throwOnError);
static member GetType : string * Func<System.Reflection.AssemblyName, System.Reflection.Assembly> * Func<System.Reflection.Assembly, string, bool, Type> * bool -> Type
Public Shared Function GetType (typeName As String, assemblyResolver As Func(Of AssemblyName, Assembly), typeResolver As Func(Of Assembly, String, Boolean, Type), throwOnError As Boolean) As Type
Parametry
- typeName
- String
Nazwa typu do pobrania. typeResolver
Jeśli parametr jest podany, nazwa typu może być dowolnym ciągiem, który typeResolver
jest w stanie rozpoznać. assemblyResolver
Jeśli parametr jest podany lub jeśli jest używana standardowa rozdzielczość typu, typeName
musi być kwalifikowaną nazwą zestawu (patrz AssemblyQualifiedName), chyba że typ znajduje się w aktualnie wykonywanym zestawie lub w mscorlib.dll/System.Private.CoreLib.dll, w którym przypadku wystarczy podać nazwę typu kwalifikowaną przez jego przestrzeń nazw.
- assemblyResolver
- Func<AssemblyName,Assembly>
Metoda, która lokalizuje i zwraca zestaw określony w elemecie typeName
. Nazwa zestawu jest przekazywana jako assemblyResolver
AssemblyName obiekt. Jeśli typeName
nie zawiera nazwy zestawu, assemblyResolver
nie jest wywoływana. Jeśli assemblyResolver
nie podano, jest wykonywana standardowa rozdzielczość zestawu.
Uwaga Nie przekazuj metod nieznanych lub niezaufanych wywołujących. Może to spowodować podniesienie uprawnień dla złośliwego kodu. Użyj tylko określonych przez siebie metod lub tych, które znasz.
Metoda, która lokalizuje i zwraca typ określony przez typeName
zestaw zwracany przez assemblyResolver
lub przez standardową rozdzielczość zestawu. Jeśli nie podano zestawu, metoda może go podać. Metoda przyjmuje również parametr określający, czy przeprowadzić wyszukiwanie bez uwzględniania wielkości liter; false
jest przekazywany do tego parametru.
Uwaga Nie przekazuj metod nieznanych lub niezaufanych wywołujących.
- throwOnError
- Boolean
true
zgłaszać wyjątek, jeśli nie można odnaleźć typu; false
aby zwrócić 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
Błąd występuje, gdy typeName
jest analizowany w nazwie typu i nazwie zestawu (na przykład gdy prosta nazwa typu zawiera niewyrażony znak specjalny).
-lub-
throwOnError
to true
i typeName
zawiera nieprawidłową składnię (na przykład "MyType[,*,]").
-lub-
typeName
reprezentuje typ ogólny, który ma typ wskaźnika, ByRef
typ lub Void jako jeden z argumentów typu.
-lub-
typeName
reprezentuje typ ogólny, który ma nieprawidłową liczbę argumentów typu.
-lub-
typeName
reprezentuje typ ogólny, a jeden z jego argumentów typu nie spełnia ograniczeń dla odpowiedniego parametru typu.
throwOnError
nie true
można odnaleźć zestawu lub jednego z jego zależności.
-lub-
typeName
zawiera nieprawidłową nazwę zestawu.
-lub-
typeName
jest prawidłową nazwą zestawu bez nazwy typu.
Zestaw lub jeden z jego elementów zależnych został znaleziony, ale nie można go załadować.
Zestaw lub jeden z jego elementów zależnych nie są prawidłowe.
-lub-
Zestaw został skompilowany przy użyciu nowszej wersji aparatu plików wykonywalnych języka wspólnego niż wersja, która jest aktualnie załadowana.
Uwagi
Scenariusze użycia dla tej metody i szczegółowe informacje o assemblyResolver
parametrach i typeResolver
można znaleźć w przeciążeniu GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) metody .
Wywoływanie tego przeciążenia metody jest takie samo jak wywoływanie GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) przeciążenia metody i określanie false
parametru ignoreCase
.
Dotyczy
GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean)
Pobiera typ z określoną nazwą, określając, czy przeprowadzić wyszukiwanie uwzględniające wielkość liter i czy zgłosić wyjątek, jeśli typ nie zostanie znaleziony, i opcjonalnie podając niestandardowe metody rozpoznawania zestawu i typu.
public:
static Type ^ GetType(System::String ^ typeName, Func<System::Reflection::AssemblyName ^, System::Reflection::Assembly ^> ^ assemblyResolver, Func<System::Reflection::Assembly ^, System::String ^, bool, Type ^> ^ typeResolver, bool throwOnError, bool ignoreCase);
public static Type? GetType (string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly?>? assemblyResolver, Func<System.Reflection.Assembly?,string,bool,Type?>? typeResolver, bool throwOnError, bool ignoreCase);
public static Type GetType (string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly> assemblyResolver, Func<System.Reflection.Assembly,string,bool,Type> typeResolver, bool throwOnError, bool ignoreCase);
static member GetType : string * Func<System.Reflection.AssemblyName, System.Reflection.Assembly> * Func<System.Reflection.Assembly, string, bool, Type> * bool * bool -> Type
Public Shared Function GetType (typeName As String, assemblyResolver As Func(Of AssemblyName, Assembly), typeResolver As Func(Of Assembly, String, Boolean, Type), throwOnError As Boolean, ignoreCase As Boolean) As Type
Parametry
- typeName
- String
Nazwa typu do pobrania. typeResolver
Jeśli parametr jest podany, nazwa typu może być dowolnym ciągiem, który typeResolver
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 (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 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, 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
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 jeden z jego elementów zależnych nie są prawidłowe.
-lub-
Zestaw został skompilowany przy użyciu nowszej wersji aparatu plików wykonywalnych języka wspólnego niż wersja, która jest aktualnie załadowana.
Uwagi
Użyj tego przeciążenia metody i skojarzonych przeciążeń (GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>) i GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean)), aby zastąpić domyślną implementację GetType metody bardziej elastycznymi implementacjami. Podając własne metody rozpoznawania nazw typów i nazw zestawów, które je zawierają, można wykonać następujące czynności:
Kontrolowanie wersji zestawu, z którego jest ładowany typ.
Podaj inne miejsce, aby wyszukać nazwę typu, która nie zawiera nazwy zestawu.
Ładowanie zestawów przy użyciu częściowych nazw zestawów.
Zwraca podklasy, System.Type które nie są tworzone przez środowisko uruchomieniowe języka wspólnego (CLR).
Na przykład w przypadku serializacji odpornej na wersje ta metoda umożliwia wyszukiwanie "najlepszego dopasowania" zestawu przy użyciu częściowej nazwy. Inne przeciążenia GetType metody wymagają nazwy typu kwalifikowanego przez zestaw, który zawiera numer wersji.
Alternatywne implementacje systemu typów mogą wymagać zwrócenia podklas, System.Type które nie są tworzone przez CLR; wszystkie typy zwracane przez inne przeciążenia metody są typami GetType środowiska uruchomieniowego.
Uwagi dotyczące użytkowania
Ta metoda przeciąża i skojarzone przeciążenia analizuje typeName
nazwę typu i nazwę zestawu, a następnie rozpoznaj nazwy. Rozpoznawanie nazwy zestawu występuje przed rozpoznawaniem nazwy typu, ponieważ należy rozpoznać nazwę typu w kontekście zestawu.
Uwaga
Jeśli nie znasz koncepcji nazw typów kwalifikowanych przez zestaw, zobacz AssemblyQualifiedName właściwość .
Jeśli typeName
nie jest kwalifikowaną nazwą zestawu, rozpoznawanie zestawów jest pomijane. Niekwalifikowane nazwy typów można rozpoznać w kontekście mscorlib.dll/System.Private.CoreLib.dll lub aktualnie wykonywanego zestawu lub opcjonalnie można podać zestaw w parametrze typeResolver
. Efekty dołączania lub pomijania nazwy zestawu dla różnych rodzajów rozpoznawania nazw są wyświetlane jako tabela w sekcji Rozpoznawanie nazw mieszanych .
Ogólne informacje o użyciu:
Nie przekazuj metod do
assemblyResolver
lubtypeResolver
jeśli pochodzą z nieznanych lub niezaufanych wywołujących. Użyj tylko określonych przez siebie metod lub tych, które znasz.Przestroga
Użycie metod z nieznanych lub niezaufanych wywołań może spowodować podniesienie uprawnień dla złośliwego kodu.
W przypadku pominięcia parametrów
assemblyResolver
i/lubtypeResolver
wartość parametruthrowOnError
jest przekazywana do metod wykonujących rozdzielczość domyślną.Jeśli
throwOnError
parametr matrue
wartość , ta metoda zwraca TypeLoadException wartośćnull
,typeResolver
a FileNotFoundException parametr whenassemblyResolver
zwraca wartośćnull
.Ta metoda nie przechwytuje wyjątków zgłaszanych przez
assemblyResolver
metody itypeResolver
. Użytkownik jest odpowiedzialny za wszelkie wyjątki zgłaszane przez metody rozpoznawania nazw.
Rozpoznawanie zespołów
Metoda assemblyResolver
odbiera AssemblyName obiekt, który jest generowany przez analizowanie nazwy zestawu ciągów, która jest zawarta w .typeName
Jeśli typeName
nie zawiera nazwy zestawu, assemblyResolver
nie jest wywoływana i null
jest przekazywana do typeResolver
.
Jeśli assemblyResolver
nie jest dostarczone, standardowe sondowanie zestawu służy do lokalizowania zestawu. Jeśli assemblyResolver
zostanie podana GetType , metoda nie wykonuje standardowego sondowania. W takim przypadku należy upewnić się, że assemblyResolver
można obsłużyć wszystkie przekazane do niego zestawy.
Metoda powinna zostać zwrócona assemblyResolver
null
, jeśli nie można rozpoznać zestawu. Jeśli assemblyResolver
funkcja zwraca null
wartość , typeResolver
nie jest wywoływana i nie ma dalszego przetwarzania; dodatkowo, jeśli throwOnError
parametr to true
, FileNotFoundException jest zgłaszany.
Jeśli przekazana assemblyResolver
wartość AssemblyName jest nazwą częściową, co najmniej jedna z jego części to null
. Jeśli na przykład nie ma wersji, Version właściwość to null
. Version Jeśli właściwość, CultureInfo właściwość i GetPublicKeyToken metoda wszystkie zwracają null
wartość , podano tylko prostą nazwę zestawu. Metoda assemblyResolver
może używać lub ignorować wszystkie części nazwy zestawu.
Efekty różnych opcji rozpoznawania zestawów są wyświetlane jako tabela w sekcji Rozpoznawanie nazw mieszanych dla prostych i kwalifikowanych zestawów nazw typów.
Rozpoznawanie typów
Jeśli typeName
nie określi nazwy zestawu, typeResolver
jest zawsze wywoływana. Jeśli typeName
określa nazwę zestawu, jest wywoływana tylko wtedy, typeResolver
gdy nazwa zestawu zostanie pomyślnie rozpoznana. Jeśli assemblyResolver
lub standardowe sondowanie zestawu zwraca null
wartość , typeResolver
nie jest wywoływana.
Metoda typeResolver
otrzymuje trzy argumenty:
Zestaw do wyszukiwania lub
null
, jeślitypeName
nie zawiera nazwy zestawu.Prosta nazwa typu. W przypadku typu zagnieżdżonego jest to najbardziej zewnętrzny typ zawierający. W przypadku typu ogólnego jest to prosta nazwa typu ogólnego.
Wartość logiczna, która ma
true
być ignorowana, jeśli wielkość liter nazw typów ma być ignorowana.
Implementacja określa sposób użycia tych argumentów. Metoda powinna zostać zwrócona typeResolver
null
, jeśli nie może rozpoznać typu. Jeśli typeResolver
funkcja zwraca wartość null
i throwOnError
ma true
wartość , to przeciążenie GetType zgłasza błąd TypeLoadException.
Efekty różnych opcji rozpoznawania typów są wyświetlane jako tabela w sekcji Rozpoznawanie nazw mieszanych dla prostych i kwalifikowanych zestawów nazw typów.
Rozpoznawanie zagnieżdżonych typów
Jeśli typeName
jest typem zagnieżdżonym, tylko nazwa najbardziej zewnętrznego typu zawierającego jest przekazywana do .typeResolver
W typeResolver
przypadku zwracania tego typu GetNestedType metoda jest wywoływana rekursywnie do momentu rozpoznania najbardziej zagnieżdżonego typu wewnętrznego.
Rozpoznawanie typów rodzajowych
Element GetType jest wywoływany rekursywnie w celu rozpoznania typów ogólnych: najpierw, aby rozpoznać sam typ ogólny, a następnie rozpoznać argumenty typu. Jeśli argument typu jest ogólny, jest wywoływany rekursywnie, GetType aby rozpoznać argumenty typu itd.
Kombinacja parametrów assemblyResolver
i typeResolver
musi być w stanie rozpoznać wszystkie poziomy tej rekursji. Załóżmy na przykład, że podajesz element assemblyResolver
, który kontroluje ładowanie elementu MyAssembly
. Załóżmy, że chcesz rozpoznać typ Dictionary<string, MyType>
ogólny (Dictionary(Of String, MyType)
w Visual Basic). Możesz przekazać następującą nazwę typu ogólnego:
"System.Collections.Generic.Dictionary`2[System.String,[MyNamespace.MyType, MyAssembly]]"
Zwróć uwagę, że MyType
jest to jedyny argument typu kwalifikowanego zestawu. Nazwy Dictionary<TKey,TValue> klas i String nie są kwalifikowane do zestawu. Musi typeResolver
być w stanie obsłużyć zestaw lub null
, ponieważ zostanie on odebrany null
dla Dictionary<TKey,TValue> elementu i String. Może obsłużyć ten przypadek, wywołując przeciążenie GetType metody, która przyjmuje ciąg, ponieważ obie niekwalifikowane nazwy typów znajdują się w mscorlib.dll/System.Private.CoreLib.dll:
Type t = Type.GetType(test,
(aName) => aName.Name == "MyAssembly" ?
Assembly.LoadFrom(@".\MyPath\v5.0\MyAssembly.dll") : null,
(assem, name, ignore) => assem == null ?
Type.GetType(name, false, ignore) :
assem.GetType(name, false, ignore)
);
let t =
Type.GetType(test,
(fun aName ->
if aName.Name = "MyAssembly" then
Assembly.LoadFrom @".\MyPath\v5.0\MyAssembly.dll"
else null),
fun assem name ignr ->
if assem = null then
Type.GetType(name, false, ignr)
else
assem.GetType(name, false, ignr))
Metoda assemblyResolver
nie jest wywoływana dla typu słownika i typu ciągu, ponieważ te nazwy typów nie są kwalifikowane do zestawu.
Teraz załóżmy, że zamiast System.String
, pierwszym typem argumentu ogólnego jest YourType
, z YourAssembly
:
"System.Collections.Generic.Dictionary`2[[YourNamespace.YourType, YourAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null], [MyNamespace.MyType, MyAssembly]]"
Ponieważ ten zestaw nie jest mscorlib.dll/System.Private.CoreLib.dll ani aktualnie wykonywany zestaw, nie można rozpoznać YourType
bez nazwy kwalifikowanej zestawu. assemblyResolve
Ponieważ zostanie wywołana rekursywnie, musi być w stanie obsłużyć ten przypadek. Zamiast zwracać null
zestawy inne niż MyAssembly
, teraz wykonuje obciążenie zestawu przy użyciu dostarczonego AssemblyName obiektu.
Type t2 = Type.GetType(test,
(aName) => aName.Name == "MyAssembly" ?
Assembly.LoadFrom(@".\MyPath\v5.0\MyAssembly.dll") :
Assembly.Load(aName),
(assem, name, ignore) => assem == null ?
Type.GetType(name, false, ignore) :
assem.GetType(name, false, ignore), true
);
let t2 =
Type.GetType(test,
(fun aName ->
if aName.Name = "MyAssembly" then
Assembly.LoadFrom @".\MyPath\v5.0\MyAssembly.dll"
else Assembly.Load aName),
(fun assem name ignr ->
if assem = null then
Type.GetType(name, false, ignr)
else
assem.GetType(name, false, ignr)), true)
Wróć do notatek użycia.
Rozpoznawanie nazw typów ze znakami specjalnymi
Niektóre znaki mają specjalne znaczenie w nazwach kwalifikowanych zestawów. Jeśli prosta nazwa typu zawiera te znaki, znaki powodują błędy analizowania, gdy prosta nazwa jest częścią nazwy kwalifikowanej zestawu. Aby uniknąć błędów analizy, należy uciec od znaków specjalnych ukośnikiem odwrotnym, zanim będzie można przekazać nazwę kwalifikowaną do zestawu GetType do metody. Jeśli na przykład typ ma nazwę Strange]Type
, znak ucieczki musi zostać dodany przed nawiasem kwadratowym w następujący sposób: Strange\]Type
.
Uwaga
Nazwy z takimi znakami specjalnymi nie mogą być tworzone w języku Visual Basic lub C#, ale można je tworzyć przy użyciu Microsoft języka pośredniego (MSIL) lub emitując zestawy dynamiczne.
W poniższej tabeli przedstawiono znaki specjalne nazw typów.
Znak | Znaczenie |
---|---|
, (przecinek) |
Ogranicznik nazw kwalifikowanych przez zestaw. |
[] (nawiasy kwadratowe) |
Jako para sufiksów wskazuje typ tablicy; jako para ograniczników ujęta w ogólne listy argumentów i nazwy kwalifikowane przez zestaw. |
& (handlowe „i”) |
Jako sufiks wskazuje, że typ jest typem referencyjnym. |
* (gwiazdka) |
Jako sufiks wskazuje, że typ jest typem wskaźnika. |
+ (plus) |
Ogranicznik dla typów zagnieżdżonych. |
\ (ukośnik odwrotny) |
Znak ucieczki. |
Właściwości, takie jak AssemblyQualifiedName zwracanie poprawnie ciągów ucieczki. Należy prawidłowo przekazać ciągi ucieczki do GetType metody . Z kolei GetType metoda przekazuje poprawnie nazwy ucieczki do typeResolver
i do domyślnych metod rozpoznawania typów. Jeśli musisz porównać nazwę z niezaużytą nazwą w pliku typeResolver
, musisz usunąć znaki ucieczki.
Wróć do notatek użycia.
Rozpoznawanie nazw mieszanych
Poniższa tabela zawiera podsumowanie interakcji między elementami assemblyResolver
, typeResolver
i domyślną rozpoznawaniem nazw dla wszystkich kombinacji nazwy typu i nazwy zestawu w programie typeName
:
Zawartość nazwy typu | Metoda rozpoznawania zestawów | Metoda rozpoznawania typów | Wynik |
---|---|---|---|
typ, zestaw | null | null | Odpowiednik wywołania Type.GetType(String, Boolean, Boolean) przeciążenia metody. |
typ, zestaw | podano | null | assemblyResolver zwraca zestaw lub zwraca null wartość , jeśli nie może rozpoznać zestawu. Jeśli zestaw zostanie rozwiązany, Assembly.GetType(String, Boolean, Boolean) przeciążenie metody jest używane do ładowania typu z zestawu. W przeciwnym razie nie ma próby rozwiązania typu. |
typ, zestaw | null | podano | Odpowiednik konwertowania nazwy zestawu na AssemblyName obiekt i wywoływania Assembly.Load(AssemblyName) przeciążenia metody w celu pobrania zestawu. Jeśli zestaw zostanie rozwiązany, zostanie przekazany do typeResolver elementu ; w przeciwnym razie typeResolver nie jest wywoływany i nie ma dalszej próby rozwiązania typu. |
typ, zestaw | podano | podano | assemblyResolver zwraca zestaw lub zwraca null wartość , jeśli nie może rozpoznać zestawu. Jeśli zestaw zostanie rozwiązany, zostanie przekazany do typeResolver elementu ; w przeciwnym razie typeResolver nie jest wywoływany i nie ma dalszej próby rozwiązania typu. |
typ | wartość NULL, podana | null | Odpowiednik wywołania Type.GetType(String, Boolean, Boolean) przeciążenia metody. Ponieważ nazwa zestawu nie jest podana, przeszukiwane są tylko mscorlib.dll/System.Private.CoreLib.dll i aktualnie wykonywany zestaw. Jeśli assemblyResolver zostanie podana, zostanie zignorowana. |
typ | wartość NULL, podana | podano | typeResolver jest wywoływana i null jest przekazywana dla zestawu. typeResolver może zapewnić typ z dowolnego zestawu, w tym zestawy ładowane do tego celu. Jeśli assemblyResolver zostanie podana, zostanie zignorowana. |
zestaw | wartość NULL, podana | wartość NULL, podana | Wartość FileLoadException jest zgłaszana, ponieważ nazwa zestawu jest analizowana tak, jakby była to nazwa typu kwalifikowanego przez zestaw. Powoduje to nieprawidłową nazwę zestawu. |
Powrót do: Uwagi o użyciu, rozpoznawanie zestawów, rozpoznawanie typów.