Type.GetType Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Type Získá objekt, který představuje zadaný typ.
Přetížení
GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) |
Získá typ se zadaným názvem, určuje, zda provést hledání rozlišující malá a malá písmena a zda vyvolat výjimku, pokud typ není nalezen, a volitelně poskytuje vlastní metody pro překlad sestavení a typ. |
GetType() |
Získá aktuální Type. |
GetType(String) |
Získá se Type zadaným názvem a provede hledání s rozlišováním velkých a malých písmen. |
GetType(String, Boolean) |
Type Získá se zadaným názvem, provede hledání s rozlišováním malých a malých písmen a určí, zda má být vyvolán výjimka, pokud typ nebyl nalezen. |
GetType(String, Boolean, Boolean) |
Získá se Type zadaným názvem a určí, zda má být vyvolán výjimka, pokud typ nebyl nalezen a zda se má provést hledání s rozlišováním malých a malých písmen. |
GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>) |
Získá typ se zadaným názvem, volitelně poskytuje vlastní metody pro překlad sestavení a typ. |
GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean) |
Získá typ se zadaným názvem, určuje, zda má vyvolat výjimku, pokud typ není nalezen, a volitelně poskytuje vlastní metody pro překlad sestavení a typ. |
GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean)
- Zdroj:
- Type.CoreCLR.cs
- Zdroj:
- Type.CoreCLR.cs
- Zdroj:
- Type.CoreCLR.cs
Získá typ se zadaným názvem, určuje, zda provést hledání rozlišující malá a malá písmena a zda vyvolat výjimku, pokud typ není nalezen, a volitelně poskytuje vlastní metody pro překlad sestavení a typ.
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
Název typu, který chcete získat.
typeResolver
Pokud je parametr zadaný, název typu může být libovolný řetězec, který typeResolver
je schopen přeložit.
assemblyResolver
Pokud je parametr zadán nebo pokud se používá standardní překlad typu, typeName
musí být název kvalifikovaný pro sestavení (viz AssemblyQualifiedName), pokud typ není v aktuálně spuštěné sestavení nebo v mscorlib.dll/System.Private.CoreLib.dll. V takovém případě stačí zadat název typu kvalifikovaný jeho oborem názvů.
- assemblyResolver
- Func<AssemblyName,Assembly>
Metoda, která vyhledá a vrátí sestavení zadané v typeName
. Název sestavení se předává assemblyResolver
jako AssemblyName objekt. Pokud typeName
neobsahuje název sestavení, assemblyResolver
není volán. Pokud assemblyResolver
není zadán, provede se standardní řešení sestavení.
Upozornění: Nepředávejte metody neznámým nebo nedůvěryhodným volajícím. To by mohlo vést ke zvýšení oprávnění pro škodlivý kód. Používejte pouze metody, které sami poskytnete nebo které znáte.
Metoda, která vyhledá a vrátí typ, který je určen typeName
ze sestavení, které je vráceno standardním assemblyResolver
řešením sestavení nebo. Pokud není k dispozici žádné sestavení, může metoda poskytnout jedno. Metoda také přebírá parametr, který určuje, zda má provést hledání bez rozlišování malých a malých písmen; hodnota je ignoreCase
předána danému parametru.
Upozornění: Nepředávejte metody neznámým nebo nedůvěryhodným volajícím.
- throwOnError
- Boolean
true
vyvolá výjimku, pokud typ nebyl nalezen; false
a vrátí null
se .
false
Zadáním se také potlačí některé další podmínky výjimky, ale ne všechny. Viz část Výjimky.
- ignoreCase
- Boolean
true
k provedení hledání bez rozlišování velkých a malých písmen pro typeName
. false
typeName
Návraty
Typ se zadaným názvem. Pokud typ není nalezen, parametr určuje, throwOnError
zda null
je vrácen nebo je vyvolán výjimka. V některých případech dojde k výjimce bez ohledu na hodnotu parametru throwOnError
. Viz část Výjimky.
Výjimky
typeName
je null
.
Je vyvolán inicializátor třídy, který vyvolá výjimku.
throwOnError
is true
a typ nebyl nalezen.
-nebo-
throwOnError
je true
a typeName
obsahuje neplatné znaky, například vloženou kartu.
-nebo-
throwOnError
je true
a typeName
je prázdný řetězec.
-nebo-
throwOnError
je true
a typeName
představuje typ pole s neplatnou velikostí.
-nebo-
typeName
představuje pole TypedReference.
K chybě dojde při typeName
analýze na název typu a název sestavení (například když jednoduchý název typu obsahuje zvláštní znak bez upozornění).
-nebo-
throwOnError
je true
a typeName
obsahuje neplatnou syntaxi (například "MyType[,*,]").
-nebo-
typeName
představuje obecný typ, který má typ ukazatele, ByRef
typ nebo Void jako jeden ze svých argumentů typu.
-nebo-
typeName
představuje obecný typ, který má nesprávný počet argumentů typu.
-nebo-
typeName
představuje obecný typ a jeden z argumentů jeho typu nesplňuje omezení odpovídajícího parametru typu.
throwOnError
is true
a sestavení nebo jedna z jeho závislostí nebyla nalezena.
Sestavení nebo některý prvek, na kterém závisí, byly nalezeny, ale nepodařilo se je načíst.
-nebo-
typeName
obsahuje neplatný název sestavení.
-nebo-
typeName
je platný název sestavení bez názvu typu.
Sestavení nebo jedna z jeho závislostí není platným sestavením pro aktuálně načtený modul runtime.
Poznámky
Další informace o tomto rozhraní API najdete v tématu Doplňkové poznámky k rozhraní API pro Type.GetType.
Platí pro
GetType()
- Zdroj:
- Type.cs
- Zdroj:
- Type.cs
- Zdroj:
- Type.cs
Získá aktuální Type.
public:
Type ^ GetType();
public:
virtual Type ^ GetType();
public Type GetType ();
override this.GetType : unit -> Type
Public Function GetType () As Type
Návraty
Aktuální Typehodnota .
Implementuje
Výjimky
Je vyvolán inicializátor třídy, který vyvolá výjimku.
Viz také
Platí pro
GetType(String)
- Zdroj:
- Type.CoreCLR.cs
- Zdroj:
- Type.CoreCLR.cs
- Zdroj:
- Type.CoreCLR.cs
Získá se Type zadaným názvem a provede hledání s rozlišováním velkých a malých písmen.
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
Název typu, který chcete získat, je kvalifikovaný pro sestavení. Viz třída AssemblyQualifiedName. Pokud je typ v právě spuštěné sestavení nebo v mscorlib.dll/System.Private.CoreLib.dll, stačí zadat název typu kvalifikovaný podle jeho oboru názvů.
Návraty
Typ se zadaným názvem, pokud je nalezen; v opačném případě . null
Výjimky
typeName
je null
.
Je vyvolán inicializátor třídy, který vyvolá výjimku.
typeName
představuje obecný typ, který má typ ukazatele, ByRef
typ nebo Void jako jeden ze svých argumentů typu.
-nebo-
typeName
představuje obecný typ, který má nesprávný počet argumentů typu.
-nebo-
typeName
představuje obecný typ a jeden z argumentů jeho typu nesplňuje omezení odpovídajícího parametru typu.
typeName
představuje neplatný typ, například pole TypedReference.
Sestavení nebo některý prvek, na kterém závisí, byly nalezeny, ale nepodařilo se je načíst.
Poznámka: V .NET pro aplikace pro Windows Store nebo v přenosné knihovně tříd místo toho zachyťte výjimku IOExceptionzákladní třídy.
Sestavení není platné pro aktuálně načtený modul runtime.
Příklady
Následující příklad načte typ objektu System.Int32
a použije tento typ objektu FullName k zobrazení vlastnosti 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
Poznámky
Můžete použít metodu GetType k získání objektu Type pro typ v jiném sestavení, pokud znáte jeho název kvalifikovaný pro sestavení, který lze získat z AssemblyQualifiedName.
GetType způsobí načtení sestavení zadaného v typeName
. Sestavení můžete také načíst pomocí Assembly.Load metody a pak pomocí Assembly.GetType metody nebo Assembly.GetTypes získat Type objekty. Pokud je typ v sestavení známém programem v době kompilace, je efektivnější ho použít typeof
v jazyce C# nebo operátor v GetType
jazyce Visual Basic.
Poznámka
Pokud typeName
nelze najít, volání GetType(String) metody vrátí null
. Nevyvolá výjimku. Chcete-li určit, zda je vyvolán výjimka, zavolejte přetížení GetType metody, která má throwOnError
parametr.
GetType funguje pouze u sestavení načtených z disku. Pokud zavoláte GetType k vyhledání typu definovaného v dynamickém sestavení definovaném System.Reflection.Emit pomocí služeb, může dojít k nekonzistentnímu chování. Toto chování závisí na tom, zda dynamické sestavení je trvalé, tj. vytvořené pomocí RunAndSave
režimů přístupu nebo Save
výčtu System.Reflection.Emit.AssemblyBuilderAccess . Pokud je dynamické sestavení trvalé a bylo zapsáno na disk před GetType
zavolání, zavaděč najde uložené sestavení na disku, načte toto sestavení a načte typ z daného sestavení. Pokud sestavení nebylo při volání uloženo na disk GetType
, vrátí null
metoda .
GetType
nerozumí přechodným dynamickým sestavením; Proto volání GetType
pro načtení typu v přechodném dynamickém sestavení vrátí null
.
Pokud chcete použít GetType
v dynamickém modulu, přihlaste se k odběru AppDomain.AssemblyResolve události a před uložením volejte GetType
. V opačném případě získáte dvě kopie sestavení v paměti.
Následující tabulka ukazuje, které členy základní třídy jsou vráceny metodami Get
při reflexi typu.
Typ členu | Static | Nestatický |
---|---|---|
Konstruktor | No | No |
Pole | No | Yes. Pole je vždy skrýváno podle názvu a podpisu. |
Událost | Neuvedeno | Pro systém typů platí obecné pravidlo, že dědičnost je stejná jako u metod, které implementují vlastnost. Reflexe pracuje s třídami jako se skrývanými podle názvu a podpisu. Viz poznámka 2 níže. |
Metoda | No | Yes. Metody (virtuální i nevirtuální) mohou být skrývány podle názvu nebo podle názvu a podpisu. |
Vnořený typ | No | No |
Vlastnost | Neuvedeno | Pro systém typů platí obecné pravidlo, že dědičnost je stejná jako u metod, které implementují vlastnost. Reflexe pracuje s třídami jako se skrývanými podle názvu a podpisu. Viz poznámka 2 níže. |
Skrývání podle názvu a podpisu bere v úvahu všechny části podpisu včetně vlastních modifikátorů, návratových typů, typů parametrů, sentinelů a nespravovaných konvencí volání. Jedná se o binární porovnání.
Pro účely reflexe jsou vlastnosti a události skrývány podle názvu a podpisu. Má-li vlastnost v základní třídě přístupové metody get i set, ale odvozená třída má pouze přístupovou metodu get, vlastnost odvozené třídy skryje vlastnost základní třídy a nebudete mít k dispozici přístup k metodě set základní třídy.
Vlastní atributy nejsou součástí systému společných typů.
Pole nebo typy modelu COM nejsou vyhledána, pokud již nebyly načteny do tabulky dostupných tříd.
typeName
může být název typu kvalifikovaný jeho oborem názvů nebo kvalifikovaný název sestavení, který obsahuje specifikaci názvu sestavení. Viz třída AssemblyQualifiedName.
Pokud typeName
obsahuje obor názvů, ale ne název sestavení, tato metoda prohledá pouze sestavení volajícího objektu a mscorlib.dll/System.Private.CoreLib.dll v tomto pořadí. Pokud typeName je plně kvalifikovaný s částečným nebo úplným názvem sestavení, tato metoda hledá v zadaném sestavení. Pokud má sestavení silný název, vyžaduje se úplný název sestavení.
Vlastnost AssemblyQualifiedName vrátí plně kvalifikovaný název typu, včetně vnořených typů, názvu sestavení a argumentů obecného typu. Všechny kompilátory, které podporují modul Common Language Runtime, vygenerují jednoduchý název vnořené třídy a reflexe při dotazu sestaví pozměněný název podle následujících pravidel.
Poznámka
Architektura procesoru je součástí identity sestavení a lze ji zadat jako součást řetězců názvů sestavení. Příklad: "ProcessorArchitecture = msil". Z důvodu kompatibility ale není součástí řetězce vráceného AssemblyQualifiedName vlastností . Typy můžete načíst také tak, že AssemblyName vytvoříte objekt a předáte ho Load příslušnému přetížení metody . Pak můžete použít metodu Assembly.GetType k načtení typů ze sestavení. Viz také AssemblyName.ProcessorArchitecture.
Oddělovač | Význam |
---|---|
Zpětné lomítko (\) | Řídicí znak. |
Zpětné přichycení (') | Předchází jedné nebo více číslic představujících počet parametrů typu umístěných na konci názvu obecného typu. |
Hranaté závorky ([]) | Uzavřít seznam argumentů obecného typu pro konstruovaný obecný typ; v seznamu argumentů typu uzavřete typ kvalifikovaný pro sestavení. |
Čárka (,) | Předchází název sestavení. |
Tečka (.) | Určuje identifikátory oboru názvů. |
Znaménko plus (+) | Předchází vnořenou třídu. |
Plně kvalifikovaný název třídy může vypadat například takto:
TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly
Pokud by obor názvů byl TopNamespace.Sub+Namespace, pak by řetězec musel před znaménkem plus (+) řídicím znakem (\), aby se zabránilo jeho interpretaci jako oddělovače vnoření. Reflexe vygeneruje tento řetězec následujícím způsobem:
TopNamespace.Sub\+Namespace.ContainingClass+NestedClass,MyAssembly
Z "++" se změní "\+\+" a z "\" se změní na "\\".
Tento kvalifikovaný název lze zachovat a později použít k načtení .Type Pokud chcete vyhledat a načíst Type, použijte GetType buď pouze s názvem typu, nebo s názvem kvalifikovaného typu sestavení. GetType s názvem typu bude hledat Type pouze v sestavení volajícího a poté v sestavení Systému. GetType s názvem kvalifikovaného typu sestavení vyhledá v libovolném Type sestavení.
Názvy typů mohou obsahovat koncové znaky poskytující další informace o typu, například zda se jedná o typ ukazatele, odkazu nebo pole. Pokud chcete načíst název typu bez těchto koncových znaků, použijte t.GetElementType().ToString()
, kde t
je typ.
Mezery jsou brány v úvahu ve všech součástech názvu typu s výjimkou názvu sestavení. V názvu sestavení jsou brány v úvahu mezery před oddělovačem ',', zatímco mezery za oddělovačem ',' jsou ignorovány.
Název obecného typu končí zpětným znakem (') následovaným číslicemi představujícími počet argumentů obecného typu. Účelem této úpravy názvů je umožnit kompilátorům podporu obecných typů se stejným názvem, ale s různým počtem parametrů typu, které se vyskytují ve stejném oboru. Například reflexe vrátí zmácené názvy Tuple`1
a Tuple`2
z obecných metod Tuple(Of T)
a Tuple(Of T0, T1)
v jazyce Visual Basic nebo Tuple<T>
a Tuple<T0, T1>
v jazyce Visual C#.
U obecných typů je seznam argumentů typu uzavřený v hranatých závorkách a argumenty typu jsou oddělené čárkami. Například obecný Dictionary<TKey,TValue> typ má dva parametry typu.
MyType
Parametr s Dictionary<TKey,TValue> klíči typu String může být reprezentován takto:
System.Collections.Generic.Dictionary`2[System.String,MyType]
Chcete-li určit typ kvalifikovaný pro sestavení v seznamu argumentů typu, uzavřete kvalifikovaný typ sestavení do hranatých závorek. Jinak jsou čárky, které oddělují části kvalifikovaného názvu sestavení, interpretovány jako oddělovače dalších argumentů typu. Například Dictionary<TKey,TValue> fromMyAssembly.dll MyType
s klíči typu Stringje možné zadat takto:
Type.GetType("System.Collections.Generic.Dictionary`2[System.String,[MyType,MyAssembly]]")
Poznámka
Typ kvalifikovaný pro sestavení může být uzavřen v hranatých závorkách pouze tehdy, pokud je uveden v seznamu parametrů typu. Pravidla pro vyhledávání sestavení pro kvalifikované a nekvalifikované typy v seznamech parametrů typů jsou stejná jako pravidla pro kvalifikované a nekvalifikované typy negenerické.
Typy s možnou hodnotou null jsou speciálním případem obecných typů. Například hodnota nullable Int32 je reprezentována řetězcem "System.Nullable'1[System.Int32]".
Poznámka
V jazycích C#, C++ a Visual Basic můžete také získat typy s možnou hodnotou null pomocí operátorů typů. Například typ s možnou Boolean hodnotou null je vrácen v typeof(Nullable<bool>)
jazyce C#, v Nullable<Boolean>::typeid
jazyce C++ a v jazyce Visual Basic.GetType(Nullable(Of Boolean))
Následující tabulka uvádí syntaxi, kterou používáte pro GetType
různé typy.
Získání | Použití |
---|---|
S možnou hodnotou null Int32 | Type.GetType("System.Nullable`1[System.Int32]") |
Nespravovaný ukazatel na MyType |
Type.GetType("MyType*") |
Nespravovaný ukazatel na ukazatel na MyType |
Type.GetType("MyType**") |
Spravovaný ukazatel nebo odkaz na MyType |
Type.GetType("MyType&") . Všimněte si, že na rozdíl od ukazatelů jsou odkazy omezené na jednu úroveň. |
Nadřazená třída a vnořená třída | Type.GetType("MyParentClass+MyNestedClass") |
Jednorozměrné pole s dolní mezí 0 | Type.GetType("MyType[]") |
Jednorozměrné pole s neznámou dolní mezí | Type.GetType("MyType[*]") |
N-dimenzionální pole | Čárka (,) v závorkách je celkem n-1krát.
System.Object[,,] Například představuje trojrozměrnou Object matici. |
Pole jednorozměrných polí | Type.GetType("MyType[][]") |
Obdélníkové dvourozměrné pole s neznámými dolními hranicemi | Type.GetType("MyType[,]") |
Obecný typ s jedním argumentem typu | Type.GetType("MyGenericType`1[MyType]") |
Obecný typ se dvěma argumenty typu | Type.GetType("MyGenericType`2[MyType,AnotherType]") |
Obecný typ se dvěma argumenty typu kvalifikovaným pro sestavení | Type.GetType("MyGenericType`2[[MyType,MyAssembly],[AnotherType,AnotherAssembly]]") |
Obecný typ kvalifikovaný pro sestavení s argumentem typu kvalifikovaným pro sestavení | Type.GetType("MyGenericType`1[[MyType,MyAssembly]],MyGenericTypeAssembly") |
Obecný typ, jehož argument typu je obecný typ se dvěma argumenty typu | Type.GetType("MyGenericType`1[AnotherGenericType`2[MyType,AnotherType]]") |
Viz také
- String
- TypeLoadException
- AssemblyQualifiedName
- GetAssembly(Type)
- GetType(String)
- AssemblyName
- Určení úplných názvů typů
Platí pro
GetType(String, Boolean)
- Zdroj:
- Type.CoreCLR.cs
- Zdroj:
- Type.CoreCLR.cs
- Zdroj:
- Type.CoreCLR.cs
Type Získá se zadaným názvem, provede hledání s rozlišováním malých a malých písmen a určí, zda má být vyvolán výjimka, pokud typ nebyl nalezen.
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
Název typu, který chcete získat, je kvalifikovaný pro sestavení. Viz třída AssemblyQualifiedName. Pokud je typ v právě spuštěné sestavení nebo v mscorlib.dll/System.Private.CoreLib.dll, stačí zadat název typu kvalifikovaný podle jeho oboru názvů.
- throwOnError
- Boolean
true
vyvolá výjimku, pokud typ nebyl nalezen; false
a vrátí null
se .
false
Zadáním se také potlačí některé další podmínky výjimky, ale ne všechny. Viz část Výjimky.
Návraty
Typ se zadaným názvem. Pokud typ není nalezen, parametr určuje, throwOnError
zda null
je vrácen nebo je vyvolán výjimka. V některých případech dojde k výjimce bez ohledu na hodnotu parametru throwOnError
. Viz část Výjimky.
Výjimky
typeName
je null
.
Je vyvolán inicializátor třídy, který vyvolá výjimku.
throwOnError
is true
a typ nebyl nalezen.
-nebo-
throwOnError
je true
a typeName
obsahuje neplatné znaky, například vloženou kartu.
-nebo-
throwOnError
je true
a typeName
je prázdný řetězec.
-nebo-
throwOnError
je true
a typeName
představuje typ pole s neplatnou velikostí.
-nebo-
typeName
představuje pole TypedReference.
throwOnError
je true
a typeName
obsahuje neplatnou syntaxi. Například "MyType[,*,]".
-nebo-
typeName
představuje obecný typ, který má typ ukazatele, ByRef
typ nebo Void jako jeden ze svých argumentů typu.
-nebo-
typeName
představuje obecný typ, který má nesprávný počet argumentů typu.
-nebo-
typeName
představuje obecný typ a jeden z argumentů jeho typu nesplňuje omezení odpovídajícího parametru typu.
throwOnError
is true
a sestavení nebo jedna z jeho závislostí nebyla nalezena.
Sestavení nebo některý prvek, na kterém závisí, byly nalezeny, ale nepodařilo se je načíst.
Poznámka: V .NET pro aplikace pro Windows Store nebo v přenosné knihovně tříd místo toho zachyťte výjimku IOExceptionzákladní třídy.
Sestavení nebo jedna z jeho závislostí není platná pro aktuálně načtený modul runtime.
Příklady
Následující příklad načte typ objektu System.Int32
a použije tento typ objektu FullName k zobrazení vlastnosti System.Int32
. Pokud objekt typu odkazuje na sestavení, které neexistuje, tento příklad vyvolá výjimku.
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
Poznámky
Můžete použít metodu GetType k získání objektu Type pro typ v jiném sestavení, pokud znáte jeho název kvalifikovaný pro sestavení, který lze získat z AssemblyQualifiedName.
GetType způsobí načtení sestavení zadaného v typeName
. Sestavení můžete také načíst pomocí Assembly.Load metody a pak pomocí Assembly.GetType metody nebo Assembly.GetTypes získat Type objekty. Pokud je typ v sestavení známém programem v době kompilace, je efektivnější ho použít typeof
v jazyce C# nebo operátor v GetType
jazyce Visual Basic.
GetType
funguje pouze u sestavení načtených z disku. Pokud zavoláte GetType
k vyhledání typu definovaného v dynamickém sestavení definovaném System.Reflection.Emit pomocí služeb, může dojít k nekonzistentnímu chování. Toto chování závisí na tom, zda dynamické sestavení je trvalé, tj. vytvořené pomocí RunAndSave
režimů přístupu nebo Save
výčtu System.Reflection.Emit.AssemblyBuilderAccess . Pokud je dynamické sestavení trvalé a bylo zapsáno na disk před GetType
zavolání, zavaděč najde uložené sestavení na disku, načte toto sestavení a načte typ z daného sestavení. Pokud sestavení nebylo při volání uloženo na disk GetType
, vrátí null
metoda .
GetType
nerozumí přechodným dynamickým sestavením; Proto volání GetType
pro načtení typu v přechodném dynamickém sestavení vrátí null
.
Pokud chcete použít GetType
v dynamickém modulu, přihlaste se k odběru události a před uložením AppDomain.AssemblyResolve zavolejte GetType
. V opačném případě získáte dvě kopie sestavení v paměti.
Parametr throwOnError
určuje, co se stane, když typ není nalezen, a také potlačuje určité další podmínky výjimky, jak je popsáno v části Výjimky. Některé výjimky jsou vyvolány bez ohledu na hodnotu parametru throwOnError
. Pokud je například typ nalezen, ale nelze ho načíst, vyvolá se i v případě, TypeLoadException že throwOnError
je false
.
Následující tabulka ukazuje, jaké členy základní třídy jsou vráceny metodami Get
při odrazu na typu.
Typ členu | Static | Nestatický |
---|---|---|
Konstruktor | No | No |
Pole | No | Yes. Pole je vždy skrýváno podle názvu a podpisu. |
Událost | Neuvedeno | Pro systém typů platí obecné pravidlo, že dědičnost je stejná jako u metod, které implementují vlastnost. Reflexe pracuje s třídami jako se skrývanými podle názvu a podpisu. Viz poznámka 2 níže. |
Metoda | No | Yes. Metody (virtuální i nevirtuální) mohou být skrývány podle názvu nebo podle názvu a podpisu. |
Vnořený typ | No | No |
Vlastnost | Neuvedeno | Pro systém typů platí obecné pravidlo, že dědičnost je stejná jako u metod, které implementují vlastnost. Reflexe pracuje s třídami jako se skrývanými podle názvu a podpisu. Viz poznámka 2 níže. |
Skrývání podle názvu a podpisu bere v úvahu všechny části podpisu včetně vlastních modifikátorů, návratových typů, typů parametrů, sentinelů a nespravovaných konvencí volání. Jedná se o binární porovnání.
Pro účely reflexe jsou vlastnosti a události skrývány podle názvu a podpisu. Má-li vlastnost v základní třídě přístupové metody get i set, ale odvozená třída má pouze přístupovou metodu get, vlastnost odvozené třídy skryje vlastnost základní třídy a nebudete mít k dispozici přístup k metodě set základní třídy.
Vlastní atributy nejsou součástí systému společných typů.
Pole nebo typy modelu COM se nehledají, pokud již nebyly načteny do tabulky dostupných tříd.
typeName
může být název typu kvalifikovaný jeho oborem názvů nebo název kvalifikovaný pro sestavení, který obsahuje specifikaci názvu sestavení. Viz třída AssemblyQualifiedName.
Pokud typeName
obsahuje obor názvů, ale ne název sestavení, tato metoda prohledá pouze sestavení volajícího objektu a mscorlib.dll/System.Private.CoreLib.dll v tomto pořadí. Pokud je typeName plně kvalifikovaný s částečným nebo úplným názvem sestavení, tato metoda vyhledá v zadaném sestavení. Pokud má sestavení silný název, je vyžadován úplný název sestavení.
Vlastnost AssemblyQualifiedName vrátí plně kvalifikovaný název typu včetně vnořených typů, názvu sestavení a obecných argumentů. Všechny kompilátory, které podporují modul Common Language Runtime, vygenerují jednoduchý název vnořené třídy a reflexe při dotazu sestaví pozměněný název podle následujících pravidel.
Poznámka
Architektura procesoru je součástí identity sestavení a dá se zadat jako součást řetězců názvů sestavení. Příklad: "ProcessorArchitecture = msil". Z důvodu kompatibility však není součástí řetězce vráceného AssemblyQualifiedName vlastností. Můžete také načíst typy tak, že AssemblyName vytvoříte objekt a předáte ho Load příslušnému přetížení metody. Pak můžete použít metodu Assembly.GetType k načtení typů ze sestavení. Viz také AssemblyName.ProcessorArchitecture.
Oddělovač | Význam |
---|---|
Zpětné lomítko (\) | Řídicí znak. |
Backtick (') | Předchází jedné nebo více číslic představujících počet parametrů typu umístěných na konci názvu obecného typu. |
Hranaté závorky ([]) | Uzavřete seznam argumentů obecného typu pro konstruovaný obecný typ; v seznamu argumentů typu uzavřete typ kvalifikovaný pro sestavení. |
Čárka (,) | Předchází název sestavení. |
Tečka (.) | Určuje identifikátory oboru názvů. |
Znaménko plus (+) | Předchází vnořenou třídu. |
Plně kvalifikovaný název třídy může vypadat například takto:
TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly
Pokud by obor názvů byl TopNamespace.Sub+Namespace, řetězec by musel před znakem plus (+) zadat řídicí znak (\), aby se zabránilo jeho interpretaci jako oddělovače vnoření. Reflexe vygeneruje tento řetězec následujícím způsobem:
TopNamespace.Sub\+Namespace.ContainingClass+NestedClass,MyAssembly
Výraz "++" se změní na \+\+" a "\" na "\\".
Tento kvalifikovaný název lze zachovat a později použít k načtení Type. Pokud chcete vyhledat a načíst Type, použijte GetType buď jenom s názvem typu, nebo s názvem kvalifikovaného typu sestavení. GetType s názvem typu bude hledat Type pouze v sestavení volajícího a pak v sestavení Systému. GetType s názvem kvalifikovaného typu sestavení vyhledá v libovolném Type sestavení.
Názvy typů mohou obsahovat koncové znaky poskytující další informace o typu, například zda se jedná o typ ukazatele, odkazu nebo pole. Pokud chcete načíst název typu bez těchto koncových znaků, použijte t.GetElementType().ToString()
, kde t
je typ.
Mezery jsou brány v úvahu ve všech součástech názvu typu s výjimkou názvu sestavení. V názvu sestavení jsou brány v úvahu mezery před oddělovačem ',', zatímco mezery za oddělovačem ',' jsou ignorovány.
Název obecného typu končí zpětným znakem (') následovaným číslicemi představujícími počet argumentů obecného typu. Účelem tohoto manglingu názvů je umožnit kompilátorům podporovat obecné typy se stejným názvem, ale s různými počty parametrů typu, které se vyskytují ve stejném oboru. Reflexe například vrátí zkamenělé názvy Tuple`1
a Tuple`2
z obecných metod Tuple(Of T)
a Tuple(Of T0, T1)
v jazyce Visual Basic nebo Tuple<T>
a Tuple<T0, T1>
v jazyce Visual C#.
U obecných typů je seznam argumentů typu uzavřený v závorkách a argumenty typu jsou oddělené čárkami. Například obecný Dictionary<TKey,TValue> má dva parametry typu. Hodnota A Dictionary<TKey,TValue> s MyType
klíči typu String může být reprezentována následujícím způsobem:
System.Collections.Generic.Dictionary`2[System.String,MyType]
Chcete-li v seznamu argumentů typu určit typ kvalifikovaný pro sestavení, uzavřete typ kvalifikovaný pro sestavení do závorek. Jinak jsou čárky, které oddělují části kvalifikovaného názvu sestavení, interpretovány jako oddělovače dalších argumentů typu. Například Dictionary<TKey,TValue> z MyType
MyAssembly.dll s klíči typu Stringmůže být zadán takto:
Type.GetType("System.Collections.Generic.Dictionary`2[System.String,[MyType,MyAssembly]]")
Poznámka
Typ kvalifikovaný pro sestavení může být uzavřen do závorek pouze tehdy, pokud se zobrazí v seznamu parametrů typu. Pravidla pro vyhledávání kvalifikovaných a nekvalifikovaných typů v seznamech parametrů typu jsou stejná jako pravidla pro kvalifikované a nekvalifikované negenerické typy.
Typy s možnou hodnotou null jsou speciálním případem obecných typů. Například hodnota nullable Int32 je reprezentována řetězcem "System.Nullable'1[System.Int32]".
Poznámka
V jazyce C#, C++ a Visual Basic můžete také získat typy s možnou hodnotou null pomocí operátorů typů. Například typ s možnou Boolean hodnotou null je vrácen typeof(Nullable<bool>)
v jazyce C#, v Nullable<Boolean>::typeid
jazyce C++ a v jazyce GetType(Nullable(Of Boolean))
Visual Basic.
Následující tabulka ukazuje syntaxi, kterou GetType
používáte pro různé typy.
Získání | Použití |
---|---|
S možnou hodnotou null Int32 | Type.GetType("System.Nullable`1[System.Int32]") |
Nespravovaný ukazatel na MyType |
Type.GetType("MyType*") |
Nespravovaný ukazatel na ukazatel na MyType |
Type.GetType("MyType**") |
Spravovaný ukazatel nebo odkaz na MyType |
Type.GetType("MyType&") . Všimněte si, že na rozdíl od ukazatelů jsou odkazy omezené na jednu úroveň. |
Nadřazená třída a vnořená třída | Type.GetType("MyParentClass+MyNestedClass") |
Jednorozměrné pole s dolní mezí 0 | Type.GetType("MyArray[]") |
Jednorozměrné pole s neznámou dolní mezí | Type.GetType("MyArray[*]") |
N-dimenzionální pole | Čárka (,) v závorkách je celkem n-1krát.
System.Object[,,] Například představuje trojrozměrnou Object matici. |
Pole dvojrozměrného pole | Type.GetType("MyArray[][]") |
Obdélníkové dvourozměrné pole s neznámými dolními hranicemi | Type.GetType("MyArray[,]") |
Obecný typ s jedním argumentem typu | Type.GetType("MyGenericType`1[MyType]") |
Obecný typ se dvěma argumenty typu | Type.GetType("MyGenericType`2[MyType,AnotherType]") |
Obecný typ se dvěma argumenty typu kvalifikovaným pro sestavení | Type.GetType("MyGenericType`2[[MyType,MyAssembly],[AnotherType,AnotherAssembly]]") |
Obecný typ kvalifikovaný pro sestavení s argumentem typu kvalifikovaným pro sestavení | Type.GetType("MyGenericType`1[[MyType,MyAssembly]],MyGenericTypeAssembly") |
Obecný typ, jehož argument typu je obecný typ se dvěma argumenty typu | Type.GetType("MyGenericType`1[AnotherGenericType`2[MyType,AnotherType]]") |
Viz také
- String
- TypeLoadException
- AssemblyQualifiedName
- GetAssembly(Type)
- GetType(String)
- AssemblyName
- Určení úplných názvů typů
Platí pro
GetType(String, Boolean, Boolean)
- Zdroj:
- Type.CoreCLR.cs
- Zdroj:
- Type.CoreCLR.cs
- Zdroj:
- Type.CoreCLR.cs
Získá se Type zadaným názvem a určí, zda má být vyvolán výjimka, pokud typ nebyl nalezen a zda se má provést hledání s rozlišováním malých a malých písmen.
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
Název typu, který chcete získat, je kvalifikovaný pro sestavení. Viz třída AssemblyQualifiedName. Pokud je typ v aktuálně spuštěné sestavení nebo v mscorlib.dll/System.Private.CoreLib.dll, stačí zadat název typu kvalifikovaný jeho oborem názvů.
- throwOnError
- Boolean
true
vyvolá výjimku, pokud typ nelze najít; false
a vrátí .null
Zadáním false
se také potlačí některé další podmínky výjimky, ale ne všechny. Viz část Výjimky.
- ignoreCase
- Boolean
true
k provedení hledání bez rozlišování malých a velkých písmen pro typeName
. false
typeName
Návraty
Typ se zadaným názvem. Pokud typ není nalezen, parametr určuje, throwOnError
zda null
je vrácen nebo je vyvolán výjimka. V některých případech dojde k výjimce bez ohledu na hodnotu parametru throwOnError
. Viz část Výjimky.
Výjimky
typeName
je null
.
Je vyvolán inicializátor třídy, který vyvolá výjimku.
throwOnError
is true
a typ nebyl nalezen.
-nebo-
throwOnError
je true
a typeName
obsahuje neplatné znaky, například vloženou kartu.
-nebo-
throwOnError
je true
a typeName
je prázdný řetězec.
-nebo-
throwOnError
je true
a typeName
představuje typ pole s neplatnou velikostí.
-nebo-
typeName
představuje pole TypedReference.
throwOnError
je true
a typeName
obsahuje neplatnou syntaxi. Například "MyType[,*,]".
-nebo-
typeName
představuje obecný typ, který má typ ukazatele, ByRef
typ nebo Void jako jeden ze svých argumentů typu.
-nebo-
typeName
představuje obecný typ, který má nesprávný počet argumentů typu.
-nebo-
typeName
představuje obecný typ a jeden z argumentů jeho typu nesplňuje omezení pro odpovídající parametr typu.
throwOnError
je true
a sestavení nebo jedna z jeho závislostí nebyla nalezena.
Sestavení nebo některý prvek, na kterém závisí, byly nalezeny, ale nepodařilo se je načíst.
Sestavení není platné pro aktuálně načtený modul runtime.
Poznámky
Můžete použít metodu GetType k získání objektu Type pro typ v jiném sestavení, pokud znáte jeho název kvalifikovaný pro sestavení, který lze získat z AssemblyQualifiedName.
GetType způsobí načtení sestavení zadaného v typeName
. Sestavení můžete také načíst pomocí Assembly.Load metody a pak pomocí Assembly.GetType metody nebo Assembly.GetTypes získat Type objekty. Pokud je typ v sestavení, které váš program v době kompilace zná, je efektivnější ho použít typeof
v jazyce C# nebo GetType
operátor v jazyce Visual Basic.
GetType
funguje pouze u sestavení načtených z disku. Pokud zavoláte GetType
k vyhledání typu definovaného v dynamickém sestavení definovaném System.Reflection.Emit pomocí služeb, může dojít k nekonzistentnímu chování. Chování závisí na tom, zda dynamické sestavení je trvalé, tj. vytvořené pomocí RunAndSave
režimů přístupu nebo Save
výčtu System.Reflection.Emit.AssemblyBuilderAccess . Pokud je dynamické sestavení trvalé a bylo zapsáno na disk před GetType
je volána, zavaděč najde uložené sestavení na disku, načte toto sestavení a načte typ z daného sestavení. Pokud sestavení nebylo při volání uloženo na disk GetType
, vrátí null
metoda .
GetType
nerozumí přechodným dynamickým sestavením; Proto volání GetType
pro načtení typu v přechodném dynamickém sestavení vrátí null
.
Pokud chcete použít GetType
v dynamickém modulu, přihlaste se k odběru AppDomain.AssemblyResolve události a před uložením volejte GetType
. V opačném případě získáte dvě kopie sestavení v paměti.
Parametr throwOnError
určuje, co se stane, když se typ nenajde, a také potlačí určité další podmínky výjimky, jak je popsáno v části Výjimky. Některé výjimky jsou vyvoláné bez ohledu na hodnotu .throwOnError
Pokud je například typ nalezen, ale nelze ho načíst, vyvolá se i v případě, TypeLoadException že throwOnError
je false
.
Následující tabulka ukazuje, které členy základní třídy jsou vráceny metodami Get
při reflexi typu.
Typ členu | Static | Nestatický |
---|---|---|
Konstruktor | No | No |
Pole | No | Yes. Pole je vždy skrýváno podle názvu a podpisu. |
Událost | Neuvedeno | Pro systém typů platí obecné pravidlo, že dědičnost je stejná jako u metod, které implementují vlastnost. Reflexe pracuje s třídami jako se skrývanými podle názvu a podpisu. Viz poznámka 2 níže. |
Metoda | No | Yes. Metody (virtuální i nevirtuální) mohou být skrývány podle názvu nebo podle názvu a podpisu. |
Vnořený typ | No | No |
Vlastnost | Neuvedeno | Pro systém typů platí obecné pravidlo, že dědičnost je stejná jako u metod, které implementují vlastnost. Reflexe pracuje s třídami jako se skrývanými podle názvu a podpisu. Viz poznámka 2 níže. |
Skrývání podle názvu a podpisu bere v úvahu všechny části podpisu včetně vlastních modifikátorů, návratových typů, typů parametrů, sentinelů a nespravovaných konvencí volání. Jedná se o binární porovnání.
Pro účely reflexe jsou vlastnosti a události skrývány podle názvu a podpisu. Má-li vlastnost v základní třídě přístupové metody get i set, ale odvozená třída má pouze přístupovou metodu get, vlastnost odvozené třídy skryje vlastnost základní třídy a nebudete mít k dispozici přístup k metodě set základní třídy.
Vlastní atributy nejsou součástí systému společných typů.
Pole nebo typy modelu COM nejsou vyhledána, pokud již nebyly načteny do tabulky dostupných tříd.
typeName
může být název typu kvalifikovaný jeho oborem názvů nebo kvalifikovaný název sestavení, který obsahuje specifikaci názvu sestavení. Viz třída AssemblyQualifiedName.
Pokud typeName
obsahuje obor názvů, ale ne název sestavení, tato metoda prohledá pouze sestavení volajícího objektu a mscorlib.dll/System.Private.CoreLib.dll v tomto pořadí. Pokud typeName je plně kvalifikovaný s částečným nebo úplným názvem sestavení, tato metoda hledá v zadaném sestavení. Pokud má sestavení silný název, vyžaduje se úplný název sestavení.
Vlastnost AssemblyQualifiedName vrátí plně kvalifikovaný název typu včetně vnořených typů, názvu sestavení a argumentů typu. Všechny kompilátory, které podporují modul Common Language Runtime, vygenerují jednoduchý název vnořené třídy a reflexe při dotazu sestaví pozměněný název podle následujících pravidel.
Poznámka
Architektura procesoru je součástí identity sestavení a lze ji zadat jako součást řetězců názvů sestavení. Příklad: "ProcessorArchitecture = msil". Z důvodu kompatibility ale není součástí řetězce vráceného AssemblyQualifiedName vlastností . Typy můžete načíst také tak, že AssemblyName vytvoříte objekt a předáte ho Load příslušnému přetížení metody . Pak můžete použít metodu Assembly.GetType k načtení typů ze sestavení. Viz také AssemblyName.ProcessorArchitecture.
Oddělovač | Význam |
---|---|
Zpětné lomítko (\) | Řídicí znak. |
Zpětné přichycení (') | Předchází jedné nebo více číslic představujících počet parametrů typu umístěných na konci názvu obecného typu. |
Hranaté závorky ([]) | Uzavřít seznam argumentů obecného typu pro konstruovaný obecný typ; v seznamu argumentů typu uzavřete typ kvalifikovaný pro sestavení. |
Čárka (,) | Předchází název sestavení. |
Tečka (.) | Určuje identifikátory oboru názvů. |
Znaménko plus (+) | Předchází vnořenou třídu. |
Plně kvalifikovaný název třídy může vypadat například takto:
TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly
Pokud by obor názvů byl TopNamespace.Sub+Namespace, pak by řetězec musel před znaménkem plus (+) řídicím znakem (\), aby se zabránilo jeho interpretaci jako oddělovače vnoření. Reflexe vygeneruje tento řetězec následujícím způsobem:
TopNamespace.Sub\+Namespace.ContainingClass+NestedClass,MyAssembly
Z "++" se změní "\+\+" a z "\" se změní na "\\".
Tento kvalifikovaný název lze zachovat a později použít k načtení .Type Pokud chcete vyhledat a načíst Type, použijte GetType buď pouze s názvem typu, nebo s názvem kvalifikovaného typu sestavení. GetType s názvem typu bude hledat Type pouze v sestavení volajícího a poté v sestavení Systému. GetType s názvem kvalifikovaného typu sestavení vyhledá v libovolném Type sestavení.
Názvy typů mohou obsahovat koncové znaky poskytující další informace o typu, například zda se jedná o typ ukazatele, odkazu nebo pole. Pokud chcete načíst název typu bez těchto koncových znaků, použijte t.GetElementType().ToString()
, kde t
je typ.
Mezery jsou brány v úvahu ve všech součástech názvu typu s výjimkou názvu sestavení. V názvu sestavení jsou brány v úvahu mezery před oddělovačem ',', zatímco mezery za oddělovačem ',' jsou ignorovány.
Název obecného typu končí zpětným znakem (') následovaným číslicemi představujícími počet argumentů obecného typu. Účelem tohoto manglingu názvů je umožnit kompilátorům podporovat obecné typy se stejným názvem, ale s různými počty parametrů typu, které se vyskytují ve stejném oboru. Reflexe například vrátí zkamenělé názvy Tuple`1
a Tuple`2
z obecných metod Tuple(Of T)
a Tuple(Of T0, T1)
v jazyce Visual Basic nebo Tuple<T>
a Tuple<T0, T1>
v jazyce Visual C#.
U obecných typů je seznam argumentů typu uzavřený v závorkách a argumenty typu jsou oddělené čárkami. Například obecný Dictionary<TKey,TValue> má dva parametry typu. Hodnota A Dictionary<TKey,TValue> s MyType
klíči typu String může být reprezentována následujícím způsobem:
System.Collections.Generic.Dictionary`2[System.String,MyType]
Chcete-li v seznamu argumentů typu určit typ kvalifikovaný pro sestavení, uzavřete typ kvalifikovaný pro sestavení do závorek. Jinak jsou čárky, které oddělují části kvalifikovaného názvu sestavení, interpretovány jako oddělovače dalších argumentů typu. Například Dictionary<TKey,TValue> z MyType
MyAssembly.dll s klíči typu Stringmůže být zadán takto:
Type.GetType("System.Collections.Generic.Dictionary`2[System.String,[MyType,MyAssembly]]")
Poznámka
Typ kvalifikovaný pro sestavení může být uzavřen do závorek pouze tehdy, pokud se zobrazí v seznamu parametrů typu. Pravidla pro vyhledávání kvalifikovaných a nekvalifikovaných typů v seznamech parametrů typu jsou stejná jako pravidla pro kvalifikované a nekvalifikované negenerické typy.
Typy s možnou hodnotou null jsou speciálním případem obecných typů. Například hodnota nullable Int32 je reprezentována řetězcem "System.Nullable'1[System.Int32]".
Poznámka
V jazyce C#, C++ a Visual Basic můžete také získat typy s možnou hodnotou null pomocí operátorů typů. Například typ s možnou Boolean hodnotou null je vrácen typeof(Nullable<bool>)
v jazyce C#, v Nullable<Boolean>::typeid
jazyce C++ a v jazyce GetType(Nullable(Of Boolean))
Visual Basic.
Následující tabulka ukazuje syntaxi, kterou GetType
používáte pro různé typy.
Získání | Použití |
---|---|
S možnou hodnotou null Int32 | Type.GetType("System.Nullable`1[System.Int32]") |
Nespravovaný ukazatel na MyType |
Type.GetType("MyType*") |
Nespravovaný ukazatel na ukazatel na MyType |
Type.GetType("MyType**") |
Spravovaný ukazatel nebo odkaz na MyType |
Type.GetType("MyType&") . Všimněte si, že na rozdíl od ukazatelů jsou odkazy omezené na jednu úroveň. |
Nadřazená třída a vnořená třída | Type.GetType("MyParentClass+MyNestedClass") |
Jednorozměrné pole s dolní mezí 0 | Type.GetType("MyArray[]") |
Jednorozměrné pole s neznámou dolní mezí | Type.GetType("MyArray[*]") |
N-dimenzionální pole | Čárka (,) v závorkách je celkem n-1krát.
System.Object[,,] Například představuje trojrozměrnou Object matici. |
Pole dvojrozměrného pole | Type.GetType("MyArray[][]") |
Obdélníkové dvourozměrné pole s neznámými dolními hranicemi | Type.GetType("MyArray[,]") |
Obecný typ s jedním argumentem typu | Type.GetType("MyGenericType`1[MyType]") |
Obecný typ se dvěma argumenty typu | Type.GetType("MyGenericType`2[MyType,AnotherType]") |
Obecný typ se dvěma argumenty typu kvalifikovaným pro sestavení | Type.GetType("MyGenericType`2[[MyType,MyAssembly],[AnotherType,AnotherAssembly]]") |
Obecný typ kvalifikovaný pro sestavení s argumentem typu kvalifikovaným pro sestavení | Type.GetType("MyGenericType`1[[MyType,MyAssembly]],MyGenericTypeAssembly") |
Obecný typ, jehož argument typu je obecný typ se dvěma argumenty typu | Type.GetType("MyGenericType`1[AnotherGenericType`2[MyType,AnotherType]]") |
Viz také
- String
- TypeLoadException
- AssemblyQualifiedName
- GetAssembly(Type)
- GetType(String)
- AssemblyName
- Určení úplných názvů typů
Platí pro
GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>)
- Zdroj:
- Type.CoreCLR.cs
- Zdroj:
- Type.CoreCLR.cs
- Zdroj:
- Type.CoreCLR.cs
Získá typ se zadaným názvem, volitelně poskytuje vlastní metody pro překlad sestavení a typ.
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
Název typu, který chcete získat.
typeResolver
Pokud je parametr zadaný, název typu může být libovolný řetězec, který typeResolver
je schopen přeložit.
assemblyResolver
Pokud je parametr zadán nebo pokud se používá standardní překlad typu, typeName
musí být název kvalifikovaný pro sestavení (viz AssemblyQualifiedName), pokud typ není v aktuálně spuštěné sestavení nebo v mscorlib.dll/System.Private.CoreLib.dll. V takovém případě stačí zadat název typu kvalifikovaný jeho oborem názvů.
- assemblyResolver
- Func<AssemblyName,Assembly>
Metoda, která vyhledá a vrátí sestavení zadané v typeName
. Název sestavení se předává assemblyResolver
jako AssemblyName objekt. Pokud typeName
neobsahuje název sestavení, assemblyResolver
není volán. Pokud assemblyResolver
není zadán, provede se standardní řešení sestavení.
Upozornění: Nepředávejte metody neznámým nebo nedůvěryhodným volajícím. To by mohlo vést ke zvýšení oprávnění pro škodlivý kód. Používejte pouze metody, které sami poskytnete nebo které znáte.
Metoda, která vyhledá a vrátí typ, který je určen typeName
ze sestavení, které je vráceno standardním assemblyResolver
řešením sestavení nebo. Pokud není k dispozici žádné sestavení, typeResolver
může metoda poskytnout jedno. Metoda také přebírá parametr, který určuje, zda má provést hledání bez rozlišování malých a malých písmen; false
se předá danému parametru.
Upozornění: Nepředávejte metody neznámým nebo nedůvěryhodným volajícím.
Návraty
Typ se zadaným názvem nebo null
pokud nebyl nalezen.
Výjimky
typeName
je null
.
Je vyvolán inicializátor třídy, který vyvolá výjimku.
K chybě dojde při typeName
analýze na název typu a název sestavení (například když jednoduchý název typu obsahuje zvláštní znak bez upozornění).
-nebo-
typeName
představuje obecný typ, který má typ ukazatele, ByRef
typ nebo Void jako jeden ze svých argumentů typu.
-nebo-
typeName
představuje obecný typ, který má nesprávný počet argumentů typu.
-nebo-
typeName
představuje obecný typ a jeden z argumentů jeho typu nesplňuje omezení odpovídajícího parametru typu.
typeName
představuje neplatný typ, například pole TypedReference.
Sestavení nebo některý prvek, na kterém závisí, byly nalezeny, ale nepodařilo se je načíst.
-nebo-
typeName
obsahuje neplatný název sestavení.
-nebo-
typeName
je platný název sestavení bez názvu typu.
Sestavení nebo jedna z jeho závislostí není platná pro aktuálně načtený modul runtime.
Poznámky
Scénáře použití pro tuto metodu a podrobnosti o parametrech assemblyResolver
a typeResolver
najdete v GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) přetížení metody.
Poznámka
Pokud typeName
nelze najít, volání GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>) metody vrátí null
. Nevyvolá výjimku. Chcete-li určit, zda je vyvolán výjimka, zavolejte přetížení GetType metody, která má throwOnError
parametr.
Volání přetížení této metody je stejné jako volání GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) přetížení metody a určení false
parametrů throwOnError
a ignoreCase
.
Platí pro
GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean)
- Zdroj:
- Type.CoreCLR.cs
- Zdroj:
- Type.CoreCLR.cs
- Zdroj:
- Type.CoreCLR.cs
Získá typ se zadaným názvem, určuje, zda má vyvolat výjimku, pokud typ není nalezen, a volitelně poskytuje vlastní metody pro překlad sestavení a typ.
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
Název typu, který chcete získat.
typeResolver
Pokud je parametr zadaný, název typu může být libovolný řetězec, který typeResolver
je schopen přeložit.
assemblyResolver
Pokud je parametr zadán nebo pokud se používá standardní překlad typu, typeName
musí být název kvalifikovaný pro sestavení (viz AssemblyQualifiedName), pokud typ není v aktuálně spuštěné sestavení nebo v mscorlib.dll/System.Private.CoreLib.dll. V takovém případě stačí zadat název typu kvalifikovaný jeho oborem názvů.
- assemblyResolver
- Func<AssemblyName,Assembly>
Metoda, která vyhledá a vrátí sestavení zadané v typeName
. Název sestavení se předává assemblyResolver
jako AssemblyName objekt. Pokud typeName
neobsahuje název sestavení, assemblyResolver
není volán. Pokud assemblyResolver
není zadán, provede se standardní řešení sestavení.
Upozornění: Nepředávejte metody neznámým nebo nedůvěryhodným volajícím. To by mohlo vést ke zvýšení oprávnění pro škodlivý kód. Používejte pouze metody, které sami poskytnete nebo které znáte.
Metoda, která vyhledá a vrátí typ, který je určen typeName
ze sestavení, které je vráceno standardním assemblyResolver
řešením sestavení nebo. Pokud není k dispozici žádné sestavení, může metoda poskytnout jedno. Metoda také přebírá parametr, který určuje, zda má provést hledání bez rozlišování malých a malých písmen; false
se předá danému parametru.
Upozornění: Nepředávejte metody neznámým nebo nedůvěryhodným volajícím.
- throwOnError
- Boolean
true
vyvolá výjimku, pokud typ nebyl nalezen; false
a vrátí null
se .
false
Zadáním se také potlačí některé další podmínky výjimky, ale ne všechny. Viz část Výjimky.
Návraty
Typ se zadaným názvem. Pokud typ není nalezen, parametr určuje, throwOnError
zda null
je vrácen nebo je vyvolán výjimka. V některých případech dojde k výjimce bez ohledu na hodnotu parametru throwOnError
. Viz část Výjimky.
Výjimky
typeName
je null
.
Je vyvolán inicializátor třídy, který vyvolá výjimku.
throwOnError
is true
a typ nebyl nalezen.
-nebo-
throwOnError
je true
a typeName
obsahuje neplatné znaky, například vloženou kartu.
-nebo-
throwOnError
je true
a typeName
je prázdný řetězec.
-nebo-
throwOnError
je true
a typeName
představuje typ pole s neplatnou velikostí.
-nebo-
typeName
představuje pole TypedReference.
K chybě dojde při typeName
analýze na název typu a název sestavení (například když jednoduchý název typu obsahuje zvláštní znak bez upozornění).
-nebo-
throwOnError
je true
a typeName
obsahuje neplatnou syntaxi (například "MyType[,*,]").
-nebo-
typeName
představuje obecný typ, který má typ ukazatele, ByRef
typ nebo Void jako jeden ze svých argumentů typu.
-nebo-
typeName
představuje obecný typ, který má nesprávný počet argumentů typu.
-nebo-
typeName
představuje obecný typ a jeden z argumentů jeho typu nesplňuje omezení odpovídajícího parametru typu.
throwOnError
is true
a sestavení nebo jedna z jeho závislostí nebyla nalezena.
-nebo-
typeName
obsahuje neplatný název sestavení.
-nebo-
typeName
je platný název sestavení bez názvu typu.
Sestavení nebo některý prvek, na kterém závisí, byly nalezeny, ale nepodařilo se je načíst.
Sestavení nebo jedna z jeho závislostí není platná pro aktuálně načtený modul runtime.
Poznámky
Scénáře použití pro tuto metodu a podrobnosti o parametrech assemblyResolver
a typeResolver
najdete v GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) přetížení metody.
Volání přetížení této metody je stejné jako volání GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) přetížení metody a zadání false
parametru ignoreCase
.