Type.GetType Metoda

Definice

Type Získá objekt, který představuje zadaný typ.

Přetížení

Name Description
GetType()

Získá aktuální Type.

GetType(String)

Type Získá se zadaným názvem a provede vyhledává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 vyhledávání s rozlišováním velkých a malých písmen a určí, zda se má vyvolat výjimka, pokud typ nebyl nalezen.

GetType(String, Boolean, Boolean)

Type Získá se zadaným názvem, určuje, zda se má vyvolat výjimka, pokud typ nebyl nalezen a zda provést vyhledává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ě poskytnutí vlastních metod pro překlad sestavení a typu.

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 nebyl nalezen, a volitelně poskytnutí vlastních metod pro překlad sestavení a typu.

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

Získá typ se zadaným názvem, určuje, zda se má provést vyhledávání citlivé na malá a velká písmena a zda vyvolat výjimku, pokud typ nebyl nalezen, a volitelně poskytnutí vlastních metod pro překlad sestavení a typu.

GetType()

Zdroj:
Type.cs
Zdroj:
Type.cs
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í Type.

Implementuje

Výjimky

Inicializátor třídy je vyvolán a vyvolá výjimku.

Viz také

Platí pro

GetType(String)

Zdroj:
Type.CoreCLR.cs
Zdroj:
Type.CoreCLR.cs
Zdroj:
Type.CoreCLR.cs
Zdroj:
Type.CoreCLR.cs
Zdroj:
Type.CoreCLR.cs

Type Získá se zadaným názvem a provede vyhledává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);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")]
public static Type? GetType(string typeName);
public static Type? GetType(string typeName);
static member GetType : string -> Type
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")>]
static member GetType : string -> Type
Public Shared Function GetType (typeName As String) As Type

Parametry

typeName
String

Kvalifikovaný název sestavení typu, který chcete získat. Viz 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ů.

Návraty

Typ se zadaným názvem, pokud byl nalezen; v opačném případě . null

Atributy

Výjimky

typeName je null.

Inicializátor třídy je vyvolán a vyvolá výjimku.

typeName představuje obecný typ, který má typ ukazatele, ByRef typ nebo Void jeden z 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ů typu nevyhovuje omezením odpovídajícího parametru typu.

typeNamepředstavuje neplatný typ, například pole .TypedReference

Sestavení nebo jedna z jejích závislostí byla nalezena, ale nelze ji načíst.

Poznámka: V .NET pro aplikace Windows Store nebo Portable Class Library zachyťte výjimku základní třídy IOException.

Sestavení není platné pro aktuálně načtený modul runtime.

Příklady

Následující příklad načte typ System.Int32 a používá tento typ objekt k zobrazení FullName vlastnosti System.Int32.

using System;

class GetTypeExample
{
     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

Metodu GetType lze použít k získání objektu Type pro typ v jiném sestavení, pokud znáte jeho název kvalifikovaný 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 Assembly.GetTypes získat Type objekty. Pokud je typ v sestavení známém pro váš program v době kompilace, je efektivnější použít typeof v jazyce C# nebo operátor GetType v Visual Basic.

Note

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.

pouze .NET Framework: GetType funguje pouze na sestaveních načtených z disku. Pokud zavoláte GetType vyhledání typu definovaného v dynamickém sestavení definovaném pomocí System.Reflection.Emit služeb, může dojít k nekonzistentnímu chování. Toto chování závisí na tom, zda je dynamické sestavení trvalé, tj. vytvořené pomocí RunAndSaveSave režimů přístupu 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 uloženo na disk při GetType zavolání, metoda vrátí null. GetType nerozumí přechodným dynamickým sestavením; proto volání GetType načíst typ v přechodné dynamické sestavení vrátí null.

V .NET Frameworku se před uložením přihlaste k odběru události GetType události AppDomain.AssemblyResolve /> v dynamickém modulu a před uložením volejte GetType. V opačném případě získáte dvě kopie sestavení v paměti.

Na .NET Core 3.0 a novějších verzích jsou zatížení sestavení aktivovaná tímto rozhraním API ovlivněna aktuální hodnotou AssemblyLoadContext.CurrentContextualReflectionContext.

Následující tabulka ukazuje, jaké č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 se vždy skryje podle názvu a signatury.
Událost Není relevantní Běžné pravidlo systému typů je, že dědičnost je stejná jako u metod, které implementují vlastnost. Reflexe považuje vlastnosti za skrýt podle názvu a podpisu. Viz poznámka 2 níže.
Metoda No Yes. Metodu (virtuální i ne virtuální) lze skrýt podle názvu nebo skrýt podle názvu a podpisu.
Vnořený typ No No
Vlastnictví Není relevantní Běžné pravidlo systému typů je, že dědičnost je stejná jako u metod, které implementují vlastnost. Reflexe považuje vlastnosti za skrýt podle názvu a podpisu. Viz poznámka 2 níže.
  1. Funkce skrytí podle jména a podpisu zohledňuje 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í.

  2. Pro reflexi jsou vlastnosti a události skryty podle názvu a podpisu. Pokud máte vlastnost s oběma přístupovými metodami get i set v základní třídě, ale odvozená třída má pouze přístupovou metodu get, odvozená třída překryje vlastnost základní třídy a nebudete mít přístup k nastavovací metodě základní třídy.

  3. Vlastní atributy nejsou součástí systému běžných typů.

Pole nebo typy modelu COM se nevyhledají, pokud ještě nebyly načteny do tabulky dostupných tříd.

typeName může být název typu kvalifikovaný jeho oborem názvů nebo kvalifikovaným názvem sestavení, který obsahuje specifikaci názvu sestavení. Viz AssemblyQualifiedName.

Pokud typeName obsahuje obor názvů, ale nikoli název sestavení, tato metoda prohledá pouze volání objekt sestavení 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 hledá 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 argumentů obecného typu. Všechny kompilátory, které podporují modul CLR (Common Language Runtime), budou generovat jednoduchý název vnořené třídy a reflexe při dotazování vytvoří manglovaný název v souladu s následujícími konvencemi.

Note

Architektura procesoru je součástí identity sestavení a lze ji zadat jako součást řetězců názvů sestavení. Například "ProcessorArchitecture=msil". Z důvodu kompatibility však není součástí řetězce vráceného AssemblyQualifiedName vlastností. Typy můžete také načíst tak, že vytvoříte AssemblyName objekt a předáte ho Load příslušnému přetížení metody. Metodu Assembly.GetType pak můžete použít 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 vytvořený obecný typ; v seznamu argumentů typu uzavřete kvalifikovaný typ sestavení.
Čárka (,) Předchází názvu sestavení.
Období (.) Označuje identifikátory oboru názvů.
Znaménko plus (+) Předchází vnořené třídě.

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ředcházet znaménko 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

"++" se stane \+\+" a "\" se změní na \\.

Tento kvalifikovaný název lze zachovat a později použít k načtení Type. Chcete-li 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 potom v sestavení Systému. GetType s názvem kvalifikovaného typu sestavení bude hledat v libovolném Type sestavení.

Názvy typů můžou obsahovat koncové znaky, které označují další informace o typu, jako je například typ odkazu, typ ukazatele nebo typ pole. Chcete-li načíst název typu bez těchto koncových znaků, použijte t.GetElementType().ToString(), kde t je typ.

Mezery jsou relevantní pro všechny součásti názvu typu s výjimkou názvu sestavení. V názvu sestavení jsou mezery před oddělovačem "," relevantní, ale 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 názvu je umožnit kompilátorům podporovat obecné typy se stejným názvem, ale s různými čísly parametrů typu, ke kterým dochází ve stejném oboru. Reflexe například vrátí mangled names Tuple`1 a Tuple`2 z obecných metod Tuple(Of T) a Tuple(Of T0, T1) v 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> má dva parametry typu. Hodnota Dictionary<TKey,TValue>MyType A s klíči typu String může být reprezentována takto:

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

Chcete-li zadat typ kvalifikovaný pro sestavení v seznamu argumentů typu, uzavřete kvalifikovaný typ sestavení v hranatých závorkách. V opačném případě jsou čárky, které oddělují části názvu kvalifikovaného sestavení, interpretovány jako oddělovače dalších argumentů typu. Například Dictionary<TKey,TValue> fromMyAssembly.dllMyType , s klíči typu String, může být zadán takto:

Type.GetType("System.Collections.Generic.Dictionary`2[System.String,[MyType,MyAssembly]]")

Note

Kvalifikovaný typ sestavení lze uzavřít do závorek pouze tehdy, když se zobrazí v seznamu parametrů typu. Pravidla pro vyhledávání sestavení pro kvalifikované a nekvalifikované typy v seznamech parametrů typu jsou stejná jako pravidla pro kvalifikované a nekvalifikované negenerické typy.

Typy s možnou hodnotou null jsou speciální případ obecných typů. Například hodnota nullable Int32 je reprezentována řetězcem "System.Nullable'1[System.Int32]".

Note

Můžete také získat typy s možnou hodnotou null pomocí operátorů typů. Například typ Boolean s možnou hodnotou null je vrácen typeof(Nullable<bool>) v jazyce C# a GetType(Nullable(Of Boolean)) v Visual Basic.

Následující tabulka ukazuje syntaxi, se GetType kterou se používá pro různé typy.

Získání Use
Hodnota nullable 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[*]")
Ndimenzionální pole Čárka (,) uvnitř hranatých závorek je celkem n-1krát. Například System.Object[,,] představuje trojrozměrné Object pole.
Pole jednorozměrných polí Type.GetType("MyType[][]")
Obdélníkové dvojrozmě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ými sestaveními Type.GetType("MyGenericType`2[[MyType,MyAssembly],[AnotherType,AnotherAssembly]]")
Obecný typ kvalifikovaný sestavením s argumentem typu kvalifikovaným sestavením 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é

Platí pro

GetType(String, Boolean)

Zdroj:
Type.CoreCLR.cs
Zdroj:
Type.CoreCLR.cs
Zdroj:
Type.CoreCLR.cs
Zdroj:
Type.CoreCLR.cs
Zdroj:
Type.CoreCLR.cs

Type Získá se zadaným názvem, provede vyhledávání s rozlišováním velkých a malých písmen a určí, zda se má vyvolat výjimka, pokud typ nebyl nalezen.

public:
 static Type ^ GetType(System::String ^ typeName, bool throwOnError);
public static Type GetType(string typeName, bool throwOnError);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")]
public static Type? GetType(string typeName, bool throwOnError);
public static Type? GetType(string typeName, bool throwOnError);
static member GetType : string * bool -> Type
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")>]
static member GetType : string * bool -> Type
Public Shared Function GetType (typeName As String, throwOnError As Boolean) As Type

Parametry

typeName
String

Kvalifikovaný název sestavení typu, který chcete získat. Viz 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ání výjimky, pokud typ nebyl nalezen; falsenullvrátit . Zadání false 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 nebyl nalezen, parametr určuje, throwOnError zda null je vrácen nebo je vyvolán výjimka. V některých případech je vyvolán výjimka bez ohledu na hodnotu .throwOnError Viz část Výjimky.

Atributy

Výjimky

typeName je null.

Inicializátor třídy je vyvolán a vyvolá výjimku.

throwOnError je true a typ nebyl nalezen.

nebo

throwOnError true obsahuje typeName neplatné znaky, například vloženou kartu.

nebo

throwOnError je true prázdný typeName řetězec.

nebo

throwOnError je true a typeName představuje typ pole s neplatnou velikostí.

nebo

typeNamepř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 jeden z 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ů typu nevyhovuje omezením odpovídajícího parametru typu.

throwOnError je true a sestavení nebo jedna z jejích závislostí nebyla nalezena.

Sestavení nebo jedna z jejích závislostí byla nalezena, ale nelze ji načíst.

Poznámka: V .NET pro aplikace Windows Store nebo Portable Class Library zachyťte výjimku základní třídy IOException.

Sestavení nebo jedna z jejích závislostí nejsou platné pro aktuálně načtený modul runtime.

Příklady

Následující příklad načte typ System.Int32 a používá tento typ objekt k zobrazení FullName vlastnosti System.Int32. Pokud objekt typu odkazuje na sestavení, které neexistuje, tento příklad vyvolá výjimku.

using System;

class GetTypeExample
{
     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

Metodu GetType lze použít k získání objektu Type pro typ v jiném sestavení, pokud znáte jeho název kvalifikovaný 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 Assembly.GetTypes získat Type objekty. Pokud je typ v sestavení známém pro váš program v době kompilace, je efektivnější použít typeof v jazyce C# nebo operátor GetType v Visual Basic.

pouze .NET Framework: GetType funguje pouze na sestaveních načtených z disku. Pokud zavoláte GetType vyhledání typu definovaného v dynamickém sestavení definovaném pomocí System.Reflection.Emit služeb, může dojít k nekonzistentnímu chování. Toto chování závisí na tom, zda je dynamické sestavení trvalé, tj. vytvořené pomocí RunAndSaveSave režimů přístupu 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 uloženo na disk při GetType zavolání, metoda vrátí null. GetType nerozumí přechodným dynamickým sestavením; proto volání GetType načíst typ v přechodné dynamické sestavení vrátí null.

V .NET Frameworku se před uložením přihlaste k odběru události GetType události AppDomain.AssemblyResolve /> v dynamickém modulu a před uložením volejte GetType. V opačném případě získáte dvě kopie sestavení v paměti.

Na .NET Core 3.0 a novějších verzích jsou zatížení sestavení aktivovaná tímto rozhraním API ovlivněna aktuální hodnotou AssemblyLoadContext.CurrentContextualReflectionContext.

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ány bez ohledu na hodnotu .throwOnError Například pokud je typ nalezen, ale nelze načíst, TypeLoadException je vyvolán, i když throwOnError je false.

Následující tabulka ukazuje, jaké č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 se vždy skryje podle názvu a signatury.
Událost Není relevantní Běžné pravidlo systému typů je, že dědičnost je stejná jako u metod, které implementují vlastnost. Reflexe považuje vlastnosti za skrýt podle názvu a podpisu. Viz poznámka 2 níže.
Metoda No Yes. Metodu (virtuální i ne virtuální) lze skrýt podle názvu nebo skrýt podle názvu a podpisu.
Vnořený typ No No
Vlastnictví Není relevantní Běžné pravidlo systému typů je, že dědičnost je stejná jako u metod, které implementují vlastnost. Reflexe považuje vlastnosti za skrýt podle názvu a podpisu. Viz poznámka 2 níže.
  1. Funkce skrytí podle jména a podpisu zohledňuje 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í.

  2. Pro reflexi jsou vlastnosti a události skryty podle názvu a podpisu. Pokud máte vlastnost s oběma přístupovými metodami get i set v základní třídě, ale odvozená třída má pouze přístupovou metodu get, odvozená třída překryje vlastnost základní třídy a nebudete mít přístup k nastavovací metodě základní třídy.

  3. Vlastní atributy nejsou součástí systému běžných typů.

Pole nebo typy modelu COM se nevyhledají, pokud ještě nebyly načteny do tabulky dostupných tříd.

typeName může být název typu kvalifikovaný jeho oborem názvů nebo kvalifikovaným názvem sestavení, který obsahuje specifikaci názvu sestavení. Viz AssemblyQualifiedName.

Pokud typeName obsahuje obor názvů, ale nikoli název sestavení, tato metoda prohledá pouze volání objekt sestavení 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 hledá 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 CLR (Common Language Runtime), budou generovat jednoduchý název vnořené třídy a reflexe při dotazování vytvoří manglovaný název v souladu s následujícími konvencemi.

Note

Architektura procesoru je součástí identity sestavení a lze ji zadat jako součást řetězců názvů sestavení. Například "ProcessorArchitecture=msil". Z důvodu kompatibility však není součástí řetězce vráceného AssemblyQualifiedName vlastností. Typy můžete také načíst tak, že vytvoříte AssemblyName objekt a předáte ho Load příslušnému přetížení metody. Metodu Assembly.GetType pak můžete použít 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 vytvořený obecný typ; v seznamu argumentů typu uzavřete kvalifikovaný typ sestavení.
Čárka (,) Předchází názvu sestavení.
Období (.) Označuje identifikátory oboru názvů.
Znaménko plus (+) Předchází vnořené třídě.

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ředcházet znaménko 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

"++" se stane \+\+" a "\" se změní na \\.

Tento kvalifikovaný název lze zachovat a později použít k načtení Type. Chcete-li 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 potom v sestavení Systému. GetType s názvem kvalifikovaného typu sestavení bude hledat v libovolném Type sestavení.

Názvy typů můžou obsahovat koncové znaky, které označují další informace o typu, jako je například typ odkazu, typ ukazatele nebo typ pole. Chcete-li načíst název typu bez těchto koncových znaků, použijte t.GetElementType().ToString(), kde t je typ.

Mezery jsou relevantní pro všechny součásti názvu typu s výjimkou názvu sestavení. V názvu sestavení jsou mezery před oddělovačem "," relevantní, ale 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 názvu je umožnit kompilátorům podporovat obecné typy se stejným názvem, ale s různými čísly parametrů typu, ke kterým dochází ve stejném oboru. Reflexe například vrátí mangled names Tuple`1 a Tuple`2 z obecných metod Tuple(Of T) a Tuple(Of T0, T1) v 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> má dva parametry typu. Hodnota Dictionary<TKey,TValue>MyType A s klíči typu String může být reprezentována takto:

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

Chcete-li zadat typ kvalifikovaný pro sestavení v seznamu argumentů typu, uzavřete kvalifikovaný typ sestavení v hranatých závorkách. V opačném případě jsou čárky, které oddělují části názvu kvalifikovaného sestavení, interpretovány jako oddělovače dalších argumentů typu. Například Dictionary<TKey,TValue> z MyType MyAssembly.dll, s klíči typu String, může být zadán takto:

Type.GetType("System.Collections.Generic.Dictionary`2[System.String,[MyType,MyAssembly]]")

Note

Kvalifikovaný typ sestavení lze uzavřít do závorek pouze tehdy, když se zobrazí v seznamu parametrů typu. Pravidla pro vyhledávání sestavení pro kvalifikované a nekvalifikované typy v seznamech parametrů typu jsou stejná jako pravidla pro kvalifikované a nekvalifikované negenerické typy.

Typy s možnou hodnotou null jsou speciální případ obecných typů. Například hodnota nullable Int32 je reprezentována řetězcem "System.Nullable'1[System.Int32]".

Note

Můžete také získat typy s možnou hodnotou null pomocí operátorů typů. Například typ Boolean s možnou hodnotou null je vrácen typeof(Nullable<bool>) v jazyce C# a GetType(Nullable(Of Boolean)) v Visual Basic.

Následující tabulka ukazuje syntaxi, se GetType kterou se používá pro různé typy.

Získání Use
Hodnota nullable 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[*]")
Ndimenzionální pole Čárka (,) uvnitř hranatých závorek je celkem n-1krát. Například System.Object[,,] představuje trojrozměrné Object pole.
Dvojrozměrné pole Type.GetType("MyArray[][]")
Obdélníkové dvojrozmě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ými sestaveními Type.GetType("MyGenericType`2[[MyType,MyAssembly],[AnotherType,AnotherAssembly]]")
Obecný typ kvalifikovaný sestavením s argumentem typu kvalifikovaným sestavením 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é

Platí pro

GetType(String, Boolean, Boolean)

Zdroj:
Type.CoreCLR.cs
Zdroj:
Type.CoreCLR.cs
Zdroj:
Type.CoreCLR.cs
Zdroj:
Type.CoreCLR.cs
Zdroj:
Type.CoreCLR.cs

Type Získá se zadaným názvem, určuje, zda se má vyvolat výjimka, pokud typ nebyl nalezen a zda provést vyhledává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);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")]
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
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")>]
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

Kvalifikovaný název sestavení typu, který chcete získat. Viz 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ání výjimky, pokud typ nebyl nalezen; falsenullvrátit . Zadání false také potlačí některé další podmínky výjimky, ale ne všechny. Viz část Výjimky.

ignoreCase
Boolean

truek provedení vyhledávání typeNamefalse bez rozlišování malých a velkých písmen , k provedení vyhledávání typeNames rozlišováním malých a velkých písmen .

Návraty

Typ se zadaným názvem. Pokud typ nebyl nalezen, parametr určuje, throwOnError zda null je vrácen nebo je vyvolán výjimka. V některých případech je vyvolán výjimka bez ohledu na hodnotu .throwOnError Viz část Výjimky.

Atributy

Výjimky

typeName je null.

Inicializátor třídy je vyvolán a vyvolá výjimku.

throwOnError je true a typ nebyl nalezen.

nebo

throwOnError true obsahuje typeName neplatné znaky, například vloženou kartu.

nebo

throwOnError je true prázdný typeName řetězec.

nebo

throwOnError je true a typeName představuje typ pole s neplatnou velikostí.

nebo

typeNamepř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 jeden z 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ů typu nevyhovuje omezením odpovídajícího parametru typu.

throwOnError je true a sestavení nebo jedna z jejích závislostí nebyla nalezena.

Sestavení nebo jedna z jejích závislostí byla nalezena, ale nelze ji načíst.

Sestavení není platné pro aktuálně načtený modul runtime.

Poznámky

Metodu GetType lze použít k získání objektu Type pro typ v jiném sestavení, pokud znáte jeho název kvalifikovaný 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 Assembly.GetTypes získat Type objekty. Pokud je typ v sestavení známém pro váš program v době kompilace, je efektivnější použít typeof v jazyce C# nebo operátor GetType v Visual Basic.

pouze .NET Framework: GetType funguje pouze na sestaveních načtených z disku. Pokud zavoláte GetType vyhledání typu definovaného v dynamickém sestavení definovaném pomocí System.Reflection.Emit služeb, může dojít k nekonzistentnímu chování. Toto chování závisí na tom, zda je dynamické sestavení trvalé, tj. vytvořené pomocí RunAndSaveSave režimů přístupu 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 uloženo na disk při GetType zavolání, metoda vrátí null. GetType nerozumí přechodným dynamickým sestavením; proto volání GetType načíst typ v přechodné dynamické sestavení vrátí null.

V .NET Frameworku se před uložením přihlaste k odběru události GetType události AppDomain.AssemblyResolve /> v dynamickém modulu a před uložením volejte GetType. V opačném případě získáte dvě kopie sestavení v paměti.

Na .NET Core 3.0 a novějších verzích jsou zatížení sestavení aktivovaná tímto rozhraním API ovlivněna aktuální hodnotou AssemblyLoadContext.CurrentContextualReflectionContext.

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ány bez ohledu na hodnotu .throwOnError Například pokud je typ nalezen, ale nelze načíst, TypeLoadException je vyvolán, i když throwOnError je false.

Následující tabulka ukazuje, jaké č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 se vždy skryje podle názvu a signatury.
Událost Není relevantní Běžné pravidlo systému typů je, že dědičnost je stejná jako u metod, které implementují vlastnost. Reflexe považuje vlastnosti za skrýt podle názvu a podpisu. Viz poznámka 2 níže.
Metoda No Yes. Metodu (virtuální i ne virtuální) lze skrýt podle názvu nebo skrýt podle názvu a podpisu.
Vnořený typ No No
Vlastnictví Není relevantní Běžné pravidlo systému typů je, že dědičnost je stejná jako u metod, které implementují vlastnost. Reflexe považuje vlastnosti za skrýt podle názvu a podpisu. Viz poznámka 2 níže.
  1. Funkce skrytí podle jména a podpisu zohledňuje 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í.

  2. Pro reflexi jsou vlastnosti a události skryty podle názvu a podpisu. Pokud máte vlastnost s oběma přístupovými metodami get i set v základní třídě, ale odvozená třída má pouze přístupovou metodu get, odvozená třída překryje vlastnost základní třídy a nebudete mít přístup k nastavovací metodě základní třídy.

  3. Vlastní atributy nejsou součástí systému běžných typů.

Pole nebo typy modelu COM se nevyhledají, pokud ještě nebyly načteny do tabulky dostupných tříd.

typeName může být název typu kvalifikovaný jeho oborem názvů nebo kvalifikovaným názvem sestavení, který obsahuje specifikaci názvu sestavení. Viz AssemblyQualifiedName.

Pokud typeName obsahuje obor názvů, ale nikoli název sestavení, tato metoda prohledá pouze volání objekt sestavení 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 hledá 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 argumentů typu. Všechny kompilátory, které podporují modul CLR (Common Language Runtime), budou generovat jednoduchý název vnořené třídy a reflexe při dotazování vytvoří manglovaný název v souladu s následujícími konvencemi.

Note

Architektura procesoru je součástí identity sestavení a lze ji zadat jako součást řetězců názvů sestavení. Například "ProcessorArchitecture=msil". Z důvodu kompatibility však není součástí řetězce vráceného AssemblyQualifiedName vlastností. Typy můžete také načíst tak, že vytvoříte AssemblyName objekt a předáte ho Load příslušnému přetížení metody. Metodu Assembly.GetType pak můžete použít 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 vytvořený obecný typ; v seznamu argumentů typu uzavřete kvalifikovaný typ sestavení.
Čárka (,) Předchází názvu sestavení.
Období (.) Označuje identifikátory oboru názvů.
Znaménko plus (+) Předchází vnořené třídě.

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ředcházet znaménko 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

"++" se stane \+\+" a "\" se změní na \\.

Tento kvalifikovaný název lze zachovat a později použít k načtení Type. Chcete-li 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 potom v sestavení Systému. GetType s názvem kvalifikovaného typu sestavení bude hledat v libovolném Type sestavení.

Názvy typů můžou obsahovat koncové znaky, které označují další informace o typu, jako je například typ odkazu, typ ukazatele nebo typ pole. Chcete-li načíst název typu bez těchto koncových znaků, použijte t.GetElementType().ToString(), kde t je typ.

Mezery jsou relevantní pro všechny součásti názvu typu s výjimkou názvu sestavení. V názvu sestavení jsou mezery před oddělovačem "," relevantní, ale 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 názvu je umožnit kompilátorům podporovat obecné typy se stejným názvem, ale s různými čísly parametrů typu, ke kterým dochází ve stejném oboru. Reflexe například vrátí mangled names Tuple`1 a Tuple`2 z obecných metod Tuple(Of T) a Tuple(Of T0, T1) v 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> má dva parametry typu. Hodnota Dictionary<TKey,TValue>MyType A s klíči typu String může být reprezentována takto:

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

Chcete-li zadat typ kvalifikovaný pro sestavení v seznamu argumentů typu, uzavřete kvalifikovaný typ sestavení v hranatých závorkách. V opačném případě jsou čárky, které oddělují části názvu kvalifikovaného sestavení, interpretovány jako oddělovače dalších argumentů typu. Například Dictionary<TKey,TValue> z MyType MyAssembly.dll, s klíči typu String, může být zadán takto:

Type.GetType("System.Collections.Generic.Dictionary`2[System.String,[MyType,MyAssembly]]")

Note

Kvalifikovaný typ sestavení lze uzavřít do závorek pouze tehdy, když se zobrazí v seznamu parametrů typu. Pravidla pro vyhledávání sestavení pro kvalifikované a nekvalifikované typy v seznamech parametrů typu jsou stejná jako pravidla pro kvalifikované a nekvalifikované negenerické typy.

Typy s možnou hodnotou null jsou speciální případ obecných typů. Například hodnota nullable Int32 je reprezentována řetězcem "System.Nullable'1[System.Int32]".

Note

Můžete také získat typy s možnou hodnotou null pomocí operátorů typů. Například typ Boolean s možnou hodnotou null je vrácen typeof(Nullable<bool>) v jazyce C# a GetType(Nullable(Of Boolean)) v Visual Basic.

Následující tabulka ukazuje syntaxi, se GetType kterou se používá pro různé typy.

Získání Use
Hodnota nullable 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[*]")
Ndimenzionální pole Čárka (,) uvnitř hranatých závorek je celkem n-1krát. Například System.Object[,,] představuje trojrozměrné Object pole.
Dvojrozměrné pole Type.GetType("MyArray[][]")
Obdélníkové dvojrozmě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ými sestaveními Type.GetType("MyGenericType`2[[MyType,MyAssembly],[AnotherType,AnotherAssembly]]")
Obecný typ kvalifikovaný sestavením s argumentem typu kvalifikovaným sestavením 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é

Platí pro

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

Zdroj:
Type.CoreCLR.cs
Zdroj:
Type.CoreCLR.cs
Zdroj:
Type.CoreCLR.cs
Zdroj:
Type.CoreCLR.cs
Zdroj:
Type.CoreCLR.cs

Získá typ se zadaným názvem, volitelně poskytnutí vlastních metod pro překlad sestavení a 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);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")]
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);
public static Type? GetType(string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly?>? assemblyResolver, Func<System.Reflection.Assembly?,string,bool,Type?>? typeResolver);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")>]
static member GetType : string * Func<System.Reflection.AssemblyName, System.Reflection.Assembly> * Func<System.Reflection.Assembly, string, bool, Type> -> Type
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 zadán, název typu může být jakýkoli řetězec, který typeResolver je schopen přeložit. assemblyResolver Pokud je parametr zadán nebo pokud je použit standardní typ rozlišení, typeName musí být kvalifikovaný název sestavení (vizAssemblyQualifiedName), 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í, které je zadáno v typeName. Název sestavení se předá assemblyResolver jako AssemblyName objekt. Pokud typeName neobsahuje název sestavení, assemblyResolver není volána. Pokud assemblyResolver není zadán, provede se standardní rozlišení sestavení.

Upozornění: Nepředávejte metody od neznámých nebo nedůvěryhodných volajících. To by mohlo vést ke zvýšení oprávnění pro škodlivý kód. Používejte pouze metody, které poskytujete nebo které znáte.

typeResolver
Func<Assembly,String,Boolean,Type>

Metoda, která vyhledá a vrátí typ určený typeName ze sestavení, které je vráceno assemblyResolver standardním překladem sestavení. Pokud není k dispozici žádné sestavení, typeResolver metoda ji může poskytnout. Metoda také přebírá parametr, který určuje, zda se má provádět vyhledávání bez rozlišování malých a velkých písmen; false tento parametr se předá.

Upozornění: Nepředávejte metody od neznámých nebo nedůvěryhodných volajících.

Návraty

Typ se zadaným názvem nebo null pokud typ nebyl nalezen.

Atributy

Výjimky

typeName je null.

Inicializátor třídy je vyvolán a vyvolá výjimku.

Při analýze názvu typu a názvu sestavení dojde k typeName chybě (například když jednoduchý název typu obsahuje nepoupravený speciální znak).

nebo

typeName představuje obecný typ, který má typ ukazatele, ByRef typ nebo Void jeden z 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ů typu nevyhovuje omezením odpovídajícího parametru typu.

typeNamepředstavuje neplatný typ, například pole .TypedReference

Sestavení nebo jedna z jejích závislostí byla nalezena, ale nelze ji načíst.

nebo

typeName obsahuje neplatný název sestavení.

nebo

typeName je platný název sestavení bez názvu typu.

Sestavení nebo jedna z jejích závislostí nejsou platné pro aktuálně načtený modul runtime.

Poznámky

Scénáře použití pro tuto metodu a podrobnosti o parametrech assemblyResolvertypeResolver najdete v GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) přetížení metody.

Note

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í této přetížení 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 pro throwOnError parametry.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
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 nebyl nalezen, a volitelně poskytnutí vlastních metod pro překlad sestavení a 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);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")]
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);
public static Type? GetType(string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly?>? assemblyResolver, Func<System.Reflection.Assembly?,string,bool,Type?>? typeResolver, bool throwOnError);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")>]
static member GetType : string * Func<System.Reflection.AssemblyName, System.Reflection.Assembly> * Func<System.Reflection.Assembly, string, bool, Type> * bool -> Type
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 zadán, název typu může být jakýkoli řetězec, který typeResolver je schopen přeložit. assemblyResolver Pokud je parametr zadán nebo pokud je použit standardní typ rozlišení, typeName musí být kvalifikovaný název sestavení (vizAssemblyQualifiedName), 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í, které je zadáno v typeName. Název sestavení se předá assemblyResolver jako AssemblyName objekt. Pokud typeName neobsahuje název sestavení, assemblyResolver není volána. Pokud assemblyResolver není zadán, provede se standardní rozlišení sestavení.

Upozornění: Nepředávejte metody od neznámých nebo nedůvěryhodných volajících. To by mohlo vést ke zvýšení oprávnění pro škodlivý kód. Používejte pouze metody, které poskytujete nebo které znáte.

typeResolver
Func<Assembly,String,Boolean,Type>

Metoda, která vyhledá a vrátí typ určený typeName ze sestavení, které je vráceno assemblyResolver standardním překladem sestavení. Pokud není k dispozici žádné sestavení, metoda ji může poskytnout. Metoda také přebírá parametr, který určuje, zda se má provádět vyhledávání bez rozlišování malých a velkých písmen; false tento parametr se předá.

Upozornění: Nepředávejte metody od neznámých nebo nedůvěryhodných volajících.

throwOnError
Boolean

true vyvolání výjimky, pokud typ nebyl nalezen; falsenullvrátit . Zadání false 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 nebyl nalezen, parametr určuje, throwOnError zda null je vrácen nebo je vyvolán výjimka. V některých případech je vyvolán výjimka bez ohledu na hodnotu .throwOnError Viz část Výjimky.

Atributy

Výjimky

typeName je null.

Inicializátor třídy je vyvolán a vyvolá výjimku.

throwOnError je true a typ nebyl nalezen.

nebo

throwOnError true obsahuje typeName neplatné znaky, například vloženou kartu.

nebo

throwOnError je true prázdný typeName řetězec.

nebo

throwOnError je true a typeName představuje typ pole s neplatnou velikostí.

nebo

typeNamepředstavuje pole .TypedReference

Při analýze názvu typu a názvu sestavení dojde k typeName chybě (například když jednoduchý název typu obsahuje nepoupravený speciální znak).

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 jeden z 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ů typu nevyhovuje omezením odpovídajícího parametru typu.

throwOnError je true a sestavení nebo jedna z jejích závislostí nebyla nalezena.

nebo

typeName obsahuje neplatný název sestavení.

nebo

typeName je platný název sestavení bez názvu typu.

Sestavení nebo jedna z jejích závislostí byla nalezena, ale nelze ji načíst.

Sestavení nebo jedna z jejích závislostí nejsou platné pro aktuálně načtený modul runtime.

Poznámky

Scénáře použití pro tuto metodu a podrobnosti o parametrech assemblyResolvertypeResolver najdete v GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) přetížení metody.

Volání této přetížení 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 parametru ignoreCase .

Platí pro

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

Zdroj:
Type.CoreCLR.cs
Zdroj:
Type.CoreCLR.cs
Zdroj:
Type.CoreCLR.cs
Zdroj:
Type.CoreCLR.cs
Zdroj:
Type.CoreCLR.cs

Získá typ se zadaným názvem, určuje, zda se má provést vyhledávání citlivé na malá a velká písmena a zda vyvolat výjimku, pokud typ nebyl nalezen, a volitelně poskytnutí vlastních metod pro překlad sestavení a 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);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")]
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);
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);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")>]
static member GetType : string * Func<System.Reflection.AssemblyName, System.Reflection.Assembly> * Func<System.Reflection.Assembly, string, bool, Type> * bool * bool -> Type
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 zadán, název typu může být jakýkoli řetězec, který typeResolver je schopen přeložit. assemblyResolver Pokud je parametr zadán nebo pokud je použit standardní typ rozlišení, typeName musí být kvalifikovaný název sestavení (vizAssemblyQualifiedName), 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í, které je zadáno v typeName. Název sestavení se předá assemblyResolver jako AssemblyName objekt. Pokud typeName neobsahuje název sestavení, assemblyResolver není volána. Pokud assemblyResolver není zadán, provede se standardní rozlišení sestavení.

Upozornění: Nepředávejte metody od neznámých nebo nedůvěryhodných volajících. To by mohlo vést ke zvýšení oprávnění pro škodlivý kód. Používejte pouze metody, které poskytujete nebo které znáte.

typeResolver
Func<Assembly,String,Boolean,Type>

Metoda, která vyhledá a vrátí typ určený typeName ze sestavení, které je vráceno assemblyResolver standardním překladem sestavení. Pokud není k dispozici žádné sestavení, metoda ji může poskytnout. Metoda také přebírá parametr, který určuje, zda se má provádět vyhledávání bez rozlišování malých a velkých písmen; hodnota ignoreCase je předána do tohoto parametru.

Upozornění: Nepředávejte metody od neznámých nebo nedůvěryhodných volajících.

throwOnError
Boolean

true vyvolání výjimky, pokud typ nebyl nalezen; falsenullvrátit . Zadání false také potlačí některé další podmínky výjimky, ale ne všechny. Viz část Výjimky.

ignoreCase
Boolean

truek provedení vyhledávání typeNamefalse bez rozlišování malých a velkých písmen , k provedení vyhledávání typeNames rozlišováním malých a velkých písmen .

Návraty

Typ se zadaným názvem. Pokud typ nebyl nalezen, parametr určuje, throwOnError zda null je vrácen nebo je vyvolán výjimka. V některých případech je vyvolán výjimka bez ohledu na hodnotu .throwOnError Viz část Výjimky.

Atributy

Výjimky

typeName je null.

Inicializátor třídy je vyvolán a vyvolá výjimku.

throwOnError je true a typ nebyl nalezen.

nebo

throwOnError true obsahuje typeName neplatné znaky, například vloženou kartu.

nebo

throwOnError je true prázdný typeName řetězec.

nebo

throwOnError je true a typeName představuje typ pole s neplatnou velikostí.

nebo

typeNamepředstavuje pole .TypedReference

Při analýze názvu typu a názvu sestavení dojde k typeName chybě (například když jednoduchý název typu obsahuje nepoupravený speciální znak).

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 jeden z 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ů typu nevyhovuje omezením odpovídajícího parametru typu.

throwOnError je true a sestavení nebo jedna z jejích závislostí nebyla nalezena.

Sestavení nebo jedna z jejích závislostí byla nalezena, ale nelze ji načíst.

nebo

typeName obsahuje neplatný název sestavení.

nebo

typeName je platný název sestavení bez názvu typu.

Sestavení nebo jedna z jejích závislostí není platným sestavením pro aktuálně načtený modul runtime.

Poznámky

Pokud .NET Core 3.0 a novějších verzích má assemblyResolver hodnotu null, bude načtení sestavení aktivované tímto rozhraním API ovlivněno aktuální hodnotou AssemblyLoadContext.CurrentContextualReflectionContext.

GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) Pomocí přetížení metody a jejích přidružených přetížení (GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>) a GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean)) nahradit výchozí implementaci GetType metody flexibilnějšími implementacemi. Zadáním vlastních metod, které přeloží názvy typů a názvy sestavení, která je obsahují, můžete provést následující:

  • Ovládejte, ze které verze sestavení je typ načten.
  • Zadejte jiné místo pro vyhledání názvu typu, který neobsahuje název sestavení.
  • Načtěte sestavení pomocí částečných názvů sestavení.
  • Vrátí podtřídy System.Type , které nejsou vytvořeny modulem CLR (Common Language Runtime).

Například u serializace odolné vůči verzím tato metoda umožňuje vyhledat "nejlepší možné" sestavení pomocí částečného názvu. Jiná přetížení metody GetType vyžadují sestavením kvalifikovaný název typu, který zahrnuje číslo verze.

Alternativní implementace systému typů mohou potřebovat vrátit podtřídy System.Type , které nejsou vytvořeny modulem CLR; všechny typy vrácené jinými přetíženími GetType metody jsou typy modulu runtime.

Poznámky k využití

Tato metoda přetížení a jeho přidružená přetížení parsuje typeName na název typu a název sestavení a poté tyto názvy vyřeší. Vyřešení názvu sestavení dochází před vyřešením názvu typu, protože název typu musí být vyřešen v rámci sestavení.

Note

Pokud neznáte koncept názvů typů kvalifikovaných pro sestavení, podívejte se na AssemblyQualifiedName tuto vlastnost.

Pokud typeName není název kvalifikovaný pro sestavení, překlad sestavení se přeskočí. Nekvalifikované názvy typů lze vyřešit v kontextu mscorlib.dll/System.Private.CoreLib.dll nebo aktuálně běžícího sestavení, nebo můžete volitelně zadat sestavení v parametru typeResolver. Účinky zahrnutí nebo vynechání názvu sestavení pro různé druhy překladu názvů se zobrazí jako tabulka v části Smíšený překlad názvů .

Poznámky k obecnému použití:

  • Nepředávejte metody assemblyResolver nebo typeResolver, pokud pocházejí z neznámých nebo nedůvěryhodných volajících. Používejte pouze metody, které poskytujete nebo které znáte.

    Caution

    Použití metod od neznámých nebo nedůvěryhodných volajících může vést ke zvýšení oprávnění pro škodlivý kód.

  • Pokud vynecháte assemblyResolver a/nebo typeResolver parametry, předá se hodnota throwOnError parametru metodám, které provádějí výchozí rozlišení.

  • Pokud throwOnError je true, tato metoda vyvolá TypeLoadException při typeResolver návratu nulla FileNotFoundException když assemblyResolver vrátí null.

  • Tato metoda nezachytí výjimky vyvolané assemblyResolver a typeResolver. Zodpovídáte za všechny výjimky vyvolané metodami překladače.

Vyřešení sestavení

Metoda assemblyResolver obdrží AssemblyName objekt, který je vytvořen parsováním názvu sestavení řetězce, který je součástí typeName. Pokud typeName neobsahuje název sestavení, assemblyResolver není volána a null předána do typeResolver.

Pokud assemblyResolver není zadán, použije se standardní sondování sestavení k vyhledání sestavení. Pokud je assemblyResolver k dispozici, metoda GetType neprovádí standardní sondování; v takovém případě musíte zajistit, aby vaše assemblyResolver mohlo zpracovat všechna sestavení, která mu předáte.

Metoda assemblyResolver by měla vrátit null, pokud sestavení nelze vyřešit. Pokud assemblyResolver vrátí null, volání typeResolver se neprovede a nedojde k dalšímu zpracování; pokud throwOnError je true, FileNotFoundException se vyhodí.

Je-li AssemblyName předána assemblyResolver je částečný název, jeden nebo více jeho částí jsou null. Pokud například nemá žádnou verzi, Version vlastnost je null. Pokud Version vlastnost, CultureInfo vlastnost a GetPublicKeyToken metoda všechny vracejí null, pak byl zadán pouze jednoduchý název sestavení. Metoda assemblyResolver může použít nebo ignorovat všechny části názvu sestavení.

Účinky různých možností rozlišení sestavení jsou zobrazeny jako tabulka v oddílu Rozlišení smíšených názvů pro jednoduché a s typy pojmenovanými pomocí kvalifikace sestavení.

Řešení typů

Pokud typeName nezadá název sestavení, typeResolver je vždy voláno. Pokud typeName určuje název sestavení, typeResolver je volána pouze tehdy, když je název sestavení úspěšně rozpoznán. Pokud assemblyResolver nebo standardní sestavení zjišťování vrátí null, typeResolver není voláno.

Metoda typeResolver přijímá tři argumenty:

  • Sestavení, které chcete vyhledat nebo null pokud typeName neobsahuje název sestavení.
  • Jednoduchý název typu. V případě vnořeného typu se jedná o vnější obalující typ. V případě obecného typu je to jednoduchý název obecného typu.
  • Logická hodnota, která je v true případě, že se má ignorovat velká a malá písmena názvů typů.

Implementace určuje způsob použití těchto argumentů. Metoda typeResolver by měla vrátit null, pokud nemůže určit typ. Pokud typeResolver se vrátí null a throwOnError je true, toto přetížení GetType vyvolá TypeLoadException.

Účinky různých možností rozlišení názvů se zobrazí jako tabulka v části Smíšené rozlišení názvů pro jednoduché názvy typů a názvy typů kvalifikované sestavou.

Řešení vnořených typů

Je-li typeName vnořený typ, do typeResolver se předá pouze název nějvyššího vnějšího typu. Pokud typeResolver vrátí tento typ, metoda GetNestedType se volá rekurzivně, dokud nebude vyřešen nejvíce vnořený typ.

Řešení obecných typů

GetType je volána rekurzivně k vyřešení generických typů: Nejprve je vyřešen samotný generický typ a pak jsou vyřešeny jeho argumenty typu. Pokud je argument typu obecný, GetType volá se rekurzivně pro vyřešení argumentů typu, a tak dále.

Kombinace assemblyResolver a typeResolver, kterou poskytnete, musí být schopna vyřešit všechny úrovně této rekurze. Předpokládejme například, že zadáte assemblyResolver , který řídí načítání MyAssembly. Předpokládejme, že chcete vyřešit obecný typ Dictionary<string, MyType> (Dictionary(Of String, MyType) v jazyce Visual Basic). Můžete předat následující název obecného typu:

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

Všimněte si, že MyType je jediným typovým argumentem kvalifikovaným sestavením. Názvy tříd Dictionary<TKey,TValue> a String nejsou plně kvalifikované pro sestavení. Vaše typeResolver musí být schopna zpracovat buď sestavení, nebo null, protože bude přijímat null pro Dictionary<TKey,TValue> a String. Tento případ lze zpracovat voláním přetížení metody GetType, která přijímá řetězec, protože obě nekvalifikovaná jména typů jsou v 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 není volána pro typ slovníku a typ řetězce, protože tyto názvy typů nejsou kvalifikované pro sestavení.

Nyní předpokládejme, že místo System.String, první obecný typ argumentu je YourTypez YourAssembly:

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

Vzhledem k tomu, že toto sestavení není mscorlib.dll/System.Private.CoreLib.dll ani aktuálně spuštěné sestavení, nelze přeložit YourType bez názvu kvalifikovaného sestavení. Vzhledem k tomu, že vaše assemblyResolve bude volána rekurzivně, musí být schopná tento případ zpracovat. Místo vrácení null pro jiná sestavení než MyAssembly, nyní provádí načtení sestavení pomocí zadaného AssemblyName objektu.

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)
Vyřešení názvů typů se speciálními znaky

Některé znaky mají speciální významy v názvech kvalifikovaných pro sestavení. Pokud název jednoduchého typu obsahuje tyto znaky, způsobují chyby při analýze, pokud je jednoduchý název součástí názvu kvalifikovaného sestavení. Abyste se vyhnuli chybám analýzy, musíte před předáním kvalifikovaného názvu GetType sestavení metodě utéct speciální znaky zpětným lomítkem. Pokud je například typ pojmenován Strange]Type, musí být escape znak přidán před hranatou závorku následujícím způsobem: Strange\]Type.

Note

Názvy s těmito speciálními znaky nelze vytvořit v jazyce Visual Basic nebo C#, ale lze je vytvořit pomocí společného zprostředkujícího jazyka (CIL) nebo generováním dynamických sestavení.

Následující tabulka uvádí speciální znaky pro názvy typů.

Znak Význam
, (čárka) Oddělovač názvů kvalifikovaných pro shromáždění.
[] (hranaté závorky) Jako dvojice přípon označuje typ pole; jako dvojice oddělovačů uzavírá obecné seznamy argumentů a názvy sestavení s kvalifikací.
(ampersand, znak &) Jako přípona označuje, že typ je odkazový typ.
* (hvězdička) Jako přípona označuje, že typ je typ ukazatele.
+ (plus) Oddělovač pro vnořené typy
\ (zpětné lomítko) Řídicí znak.

Vlastnosti, jako je AssemblyQualifiedName, vracejí správně escapované řetězce. Metodě musíte předat správně uchvácené GetType řetězce. Metoda GetType pak předává správně upravené názvy do typeResolver a do výchozích metod řešení typů. Pokud potřebujete porovnat název s nepoupraveným názvem, typeResolvermusíte řídicí znaky odebrat.

Smíšené rozlišení názvů

Následující tabulka shrnuje interakce mezi assemblyResolvera typeResolvervýchozím překladem názvů pro všechny kombinace názvu typu a názvu sestavení v typeName:

Obsah názvu typu Metoda překladače sestavení Metoda překladače typů Result
typ, sestavení null null Ekvivalent volání metody s přetížením Type.GetType(String, Boolean, Boolean).
typ, sestavení poskytnutý null assemblyResolver vrátí sestavení nebo vrátí null , pokud nemůže vyřešit sestavení. Pokud je sestavení vyřešeno, přetížená metoda Assembly.GetType(String, Boolean, Boolean) se používá k načtení typu ze sestavení; jinak se neprovádí pokus o vyřešení typu.
typ, sestavení null poskytnutý Ekvivalentní převodu názvu sestavení na AssemblyName objekt a volání Assembly.Load(AssemblyName) přetížení metody získat sestavení. Pokud je sestavení vyřešeno, předá se typeResolver; jinak není volána typeResolver a nebude podniknut další pokus o vyřešení typu.
typ, sestavení poskytnutý poskytnutý assemblyResolver vrátí sestavení nebo vrátí null , pokud nemůže vyřešit sestavení. Pokud je sestavení vyřešeno, předá se typeResolver; jinak není volána typeResolver a nebude podniknut další pokus o vyřešení typu.
typ null, poskytnuto null Ekvivalent volání metody s přetížením Type.GetType(String, Boolean, Boolean). Protože název sestavení není zadaný, prohledávají se pouze mscorlib.dll/System.Private.CoreLib.dll a aktuálně spuštěné sestavení. Pokud assemblyResolver je zadaný, bude ignorován.
typ null, poskytnuto poskytnutý typeResolver je volán a null je předán pro sestavení. typeResolver může poskytnout typ z jakéhokoli sestavení, včetně sestavení, která za tímto účelem načte. Pokud assemblyResolver je zadaný, bude ignorován.
sestavení null, poskytnuto null, poskytnuto Vyvolá se odpověď FileLoadException , protože název sestavení je analyzován, jako by se jednalo o název typu kvalifikovaného sestavení. Výsledkem je neplatný název sestavení.

Platí pro