Tento článek byl přeložený strojově. Pokud chcete zobrazit článek v angličtině, zaškrtněte políčko Angličtina. Anglickou verzi článku můžete také zobrazit v místním okně přesunutím ukazatele myši nad text.
Překlad
Angličtina

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

.NET Framework (current version)
 
System_CAPS_notePoznámka

The .NET API Reference documentation has a new home. Visit the .NET API Browser on docs.microsoft.com to see the new experience.

Získá typ se zadaným názvem určení, zda pro vyhledávání malá a velká písmena a zda má vyvolat výjimku, pokud není typ nalezen a volitelně poskytnutí vlastních metod řešení sestavení a typu.

Obor názvů:   System
Sestavení:  mscorlib (v mscorlib.dll)

public static Type GetType(
	string typeName,
	Func<AssemblyName, Assembly> assemblyResolver,
	Func<Assembly, string, bool, Type> typeResolver,
	bool throwOnError,
	bool ignoreCase
)

Parametry

typeName
Type: System.String

Název typu získat. Pokud typeResolver je zadán parametr, název typu mohou být některé řetězec, který typeResolver je schopen řešení. Pokud assemblyResolver parametr je za předpokladu, nebo pokud se používá standardní typ řešení, typeName musí být kvalifikovaný název sestavení (viz AssemblyQualifiedName), pokud typ je v současné době provádění sestavení nebo Mscorlib.dll, ve kterém případ stačí zadat název typu kvalifikován jeho oborem názvů.

assemblyResolver
Type: System.Func<AssemblyName, Assembly>

Metoda, která vyhledává a vrátí sestavení, které je zadáno v typeName. Název sestavení je předán assemblyResolver jako AssemblyName objektu. Pokud typeName neobsahuje název sestavení, assemblyResolver není volána. Pokud assemblyResolver není zadaný, standardní sestavení řešení provádět.

Upozornění: nepředávejte metody od neznámých a nedůvěryhodných volajících. To by mohlo způsobit zvýšení úrovně oprávnění pro škodlivý kód. Použijte pouze metody, které poskytnete nebo které jste obeznámeni s.

typeResolver
Type: System.Func<Assembly, String, Boolean, Type>

Metoda, která vyhledá a vrátí typ, který je určen typeName ze sestavení, který je vrácen assemblyResolver nebo podle standardní sestavení řešení. Pokud je k dispozici žádné sestavení, můžete zadat metodu jeden. Metoda také přijímá parametr, který určuje, zda chcete provádět prohledávání velká a malá písmena. Hodnota ignoreCase je předán tento parametr.

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

throwOnError
Type: System.Boolean

true Chcete-li vyvolat výjimku, pokud nelze najít typ; false vrátit null. Určení false potlačí i některé další podmínky výjimek, ale ne všechny z nich. Viz část výjimky.

ignoreCase
Type: System.Boolean

true pro velká a malá písmena vyhledávání pro typeName, false malá a velká písmena vyhledávání pro typeName.

Návratová hodnota

Type: System.Type

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

Exception Condition
ArgumentNullException

typeName je null.

TargetInvocationException

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

TypeLoadException

throwOnError je true a typ nebyl nalezen.

- nebo -

throwOnError je true a typeName obsahuje neplatné znaky, jako je například vložený znak tabulátoru.

- nebo -

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

- nebo -

throwOnError je true a typeName reprezentuje typ pole s neplatnou velikostí.

- nebo -

typeName představuje pole TypedReference.

ArgumentException

Dojde k chybě při typeName je analyzován do názvu typu a název sestavení (například, pokud název jednoduchý typ obsahuje speciální znak bez řídicí sekvence).

- nebo -

throwOnError je true a typeName obsahuje neplatnou syntaxi (například "MyType[,*,]").

- nebo -

typeName reprezentuje obecný typ, který má typ ukazatele ByRef typu, nebo Void jako jeden z argumentů typu.

- nebo -

typeName reprezentuje obecný typ, který má nesprávný počet argumentů typu.

- nebo -

typeName reprezentuje obecný typ, a jeden z argumentů typu nevyhovuje omezením pro odpovídající typ parametru.

FileNotFoundException

throwOnError je true a sestavení nebo některý z jeho závislostí nebyla nalezena.

FileLoadException

Sestavení nebo některý z jeho závislostí nebyla nalezena, ale nelze načíst.

- nebo -

typeName obsahuje název neplatný sestavení.

- nebo -

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

BadImageFormatException

Sestavení nebo některý z jeho závislostí není platný.

- nebo -

Sestavení bylo zkompilováno pomocí novější verze common language runtime, než je aktuálně načtená verze.

Pomocí této metody přetížení a jejich přidružené 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í implementace GetType Metoda s implementacemi flexibilnější. Poskytnutím vlastní metody, které řešení názvy typů a názvy sestavení, které je obsahují, může postupujte následovně:

  • Jaké verze sestavení je typ načten z ovládacího prvku.

  • Zadejte jiný vhodným místem pro název typu, který neobsahuje název sestavení.

  • Načtení sestavení pomocí názvů částečného sestavení.

  • Vrátí podtříd System.Type nejsou vytvořené modul common language runtime (CLR).

Například v serializace tolerantní k verzím tato metoda umožňuje hledat pomocí částečný název sestavení se "nejvhodnější". Další přetížení GetType Metoda vyžadovat název sestavení kvalifikovaný typ, který zahrnuje číslo verze.

Alternativní implementace systému typů může být nutné k vrácení podtříd System.Type které nejsou vytvořeny modulem CLR; všechny typy, které jsou vráceny pomocí dalších přetížení GetType Metoda jsou typy modulu runtime.

Toto přetížení metody a jejich přidružené přetížení analyzovat typeName do názvu typu a název sestavení a potom přeložit názvy. Překlad názvu sestavení dojde před překladu názvu typu, protože název typu musí být přeložit v rámci sestavení.

System_CAPS_notePoznámka

Pokud jste obeznámeni s koncept názvy sestavení kvalifikovaný typ, naleznete v části AssemblyQualifiedName vlastnost.

Pokud typeName není kvalifikovaný název sestavení, je přeskočen sestavení řešení. Názvy neúplných typů mohou být vyřešeny v kontextu Mscorlib.dll nebo aktuálně spuštěné sestavení, nebo můžete volitelně zadat sestavení v typeResolver parametr. Účinky včetně nebo vynechání název sestavení pro různé druhy překlad názvů jsou zobrazeny v tabulce v překlad smíšený oddílu.

Poznámky k použití obecné:

  • Nepředávejte metody assemblyResolver nebo typeResolver které pocházejí z neznámých a nedůvěryhodných volajících. Použijte pouze metody, které poskytnete nebo které jste obeznámeni s.

    System_CAPS_cautionUpozornění

    Použití metody od neznámých a nedůvěryhodných volajících může mít za následek zvýšení oprávnění pro škodlivý kód.

  • Vynecháte-li assemblyResolver nebo typeResolver parametrů, hodnota throwOnError předán parametr metody, které provádějí výchozí rozlišení.

  • Pokud throwOnError je true, tato metoda vyvolá TypeLoadException Při typeResolver vrátí null, a FileNotFoundException Při assemblyResolver vrátí null.

  • Tato metoda nezachytí výjimky vyvolané assemblyResolver a typeResolver. Zodpovídáte za všechny výjimky, které jsou vyvolány pomocí metody překladače.

assemblyResolver Metoda obdrží AssemblyName objektu, který je vytvořen pomocí analýzy název sestavení řetězec, který je součástí typeName. Pokud typeName neobsahuje název sestavení, assemblyResolver není volána a null je předán typeResolver.

Pokud assemblyResolver není zadaný, standardní sestavení zkušební fáze se používá k nalezení sestavení. Pokud assemblyResolver je k dispozici, GetType metoda neprovádí standardní zkušební fáze; v takovém případě musíte zajistit, aby vaše assemblyResolver dokáže zpracovat všechna sestavení, které předat.

assemblyResolver Metoda by měla vrátit null sestavení nelze najít. Pokud assemblyResolver vrátí null, typeResolver není volána a žádné další zpracování dojde k; kromě toho pokud throwOnError je true, FileNotFoundException je vyvolána výjimka.

Pokud AssemblyName který je předán assemblyResolver částečné název, jednu nebo více jejích částí jsou null. Pokud nemá verzi, například Version vlastnost je null. Pokud Version vlastnost, CultureInfo vlastnost a GetPublicKeyToken Metoda všechny návratové null, pak byl zadán pouze jednoduchý název sestavení. assemblyResolver Metodu můžete použít nebo ignorovat všechny části názvu sestavení.

Účinky možností rozlišení různých sestavení jsou zobrazeny v tabulce v překlad smíšený oddílu pro názvy typů jednoduché a kvalifikovaný sestavení.

Pokud typeName neurčuje název sestavení, typeResolver je volána vždy. Pokud typeName Určuje název sestavení, typeResolver je volána, pouze když je úspěšně vyřešit název sestavení. Pokud assemblyResolver nebo zjišťování vrátí standardní sestavení null, typeResolver není volána.

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

  • Sestavení pro vyhledávání nebo null Pokud typeName neobsahuje název sestavení.

  • Jednoduchý název typu. V případě vnořený typ jde nejkrajnější nadřazeného typu. V případě obecného typu je to jednoduchý název obecného typu.

  • Logická hodnota, která je true -li velikost písmen názvů typů ignorovány.

Implementace určuje způsob, jakým tyto argumenty jsou používány. typeResolver Metoda by měla vrátit null Pokud typ nelze vyřešit. Pokud typeResolver vrátí null a throwOnError je true, tato přetížení GetType vyvolá TypeLoadException.

Účinky možností rozlišení jiného typu jsou zobrazeny v tabulce v překlad smíšený oddílu pro názvy typů jednoduché a kvalifikovaný sestavení.

Pokud typeName je vnořený typ, pouze název krajních obsahující typ je předán typeResolver. Při typeResolver vrátí tento typ GetNestedType je volána metoda rekurzivně dokud nejvnitřnějšího vnořený typ byl vyřešen.

GetType Je volat rekurzivně řešení obecných typů: nejprve k vyřešení obecného typu, samotného a potom k vyřešení argumentů typu. Pokud je argumentem Typ obecný, GetType je volat rekurzivně řešení argumentů typu a tak dále.

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

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

Všimněte si, že MyType je pouze sestavení kvalifikovaný typ argumentu. Názvy Dictionary<TKey, TValue> a String třídy nejsou kvalifikován sestavení. Vaše typeResolver musí být možné popisovač buď sestavení nebo null, protože se zobrazí null pro Dictionary<TKey, TValue> a String. Případ je schopen zpracovat voláním přetížení GetType metodu, která přijímá řetězec, protože jsou obě typu neúplné názvy v Mscorlib.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)
                     ); 

assemblyResolver Není zavolána metoda pro typ slovníku a typ řetězce, protože tyto názvy typů nejsou kvalifikován sestavení.

Nyní předpokládejme, že místo System.String, je první argument obecného typu YourType, z 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 ani aktuálně spuštěné sestavení, nelze vyřešit YourType bez kvalifikovaný název sestavení. Protože vaše assemblyResolve bude volat rekurzivně, musí být schopen zpracovat tento případ. Namísto vrácení null pro sestavení než MyAssembly, nyní provádí načtení sestavení použitím 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
                      ); 

Zpět na poznámky k použití.

Některé znaky mají speciální význam v názvy kvalifikované pro sestavení. Pokud název jednoduchý typ obsahuje tyto znaky, znaky při jednoduchý název je součástí kvalifikovaný název sestavení způsobit chyby analyzátoru. Aby nedocházelo k chybám analýzy, musí řídicí speciální znaky zpětné lomítko před můžete předat kvalifikovaný název sestavení k GetType Metoda. Například, pokud je s názvem typu Strange]Type, řídicí znak je třeba přidat před hranatá závorka následujícím způsobem: Strange\]Type.

System_CAPS_notePoznámka

Názvy s speciálních znaků, nelze vytvořit v jazyce Visual Basic nebo C#, ale lze vytvořit pomocí jazyka Microsoft intermediate language (MSIL) nebo Emitování dynamických sestavení.

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

Znak

Význam

, (čárka)

Oddělovač pro názvy kvalifikované pro sestavení.

[] (hranaté závorky)

Jako dvojice příponu označuje typ pole; jako oddělovač pár obklopuje obecným argumentem seznamy a názvy kvalifikované pro sestavení.

& (ampersand)

Jako příponu označuje, že typ je typ odkazu.

* (hvězdička)

Jako příponu označuje, že typ je typ ukazatele.

+ (plus)

Oddělovač pro vnořené typy.

\ (zpětné lomítko)

Řídicí znak.

Vlastnosti, jako AssemblyQualifiedName return správně uvozeny řetězce. Je třeba předat správně řídicími znaky řetězce na GetType Metoda. Naopak GetType metoda předává správně řídicí názvy do typeResolver a výchozí typ rozlišení metody. Pokud je třeba porovnat název bez řídicí sekvence název v typeResolver, je nutné odebrat řídicí znaky.

Zpět na poznámky k použití.

Následující tabulka shrnuje interakce mezi assemblyResolver, typeResolver, a výchozí překlad IP adres pro všechny kombinace název typu a názvu sestavení v typeName:

Název typu obsahu

Metoda překladače sestavení

Metoda typu Řešitel

Výsledek

typ, sestavení

null

null

Ekvivalentní volání Type.GetType(String, Boolean, Boolean) přetížení metody.

typ, sestavení

k dispozici

null

assemblyResolver Vrátí sestavení nebo vrátí null Pokud sestavení nelze vyřešit. Pokud je vyřešen, sestavení Assembly.GetType(String, Boolean, Boolean) přetížení metody slouží k načtení typu ze sestavení, jinak neexistuje žádný pokus o přeložení typu.

typ, sestavení

null

k dispozici

Ekvivalentní převádění podle názvu sestavení AssemblyName objektu a volání Assembly.Load(AssemblyName) přetížení metody, chcete-li získat sestavení. Pokud sestavení je vyřešen, je předáno typeResolverjinak typeResolver není volána a není k dispozici žádné další pokus o přeložení typu.

typ, sestavení

k dispozici

k dispozici

assemblyResolver Vrátí sestavení nebo vrátí null Pokud sestavení nelze vyřešit. Pokud sestavení je vyřešen, je předáno typeResolverjinak typeResolver není volána a není k dispozici žádné další pokus o přeložení typu.

– typ

Null, k dispozici

null

Ekvivalentní volání Type.GetType(String, Boolean, Boolean) přetížení metody. Vzhledem k tomu, že název sestavení není k dispozici, budou vyhledány pouze Mscorlib.dll a aktuálně spuštěné sestavení. Pokud assemblyResolver je k dispozici je ignorován.

– typ

Null, k dispozici

k dispozici

typeResolver je volána, a null je předán pro sestavení. typeResolver můžete zadat typ z libovolného sestavení včetně sestavení, které načte pro tento účel. Pokud assemblyResolver je k dispozici je ignorován.

sestavení

Null, k dispozici

Null, k dispozici

A FileLoadException je vyvolána, protože název sestavení je analyzován, jako by šlo s názvem typu kvalifikovaného sestavení. Výsledkem je název neplatný sestavení.

Zpět na: poznámky k použití, překlad sestavení, řešení typů.

.NET Framework
K dispozici od 4.0
Zpět na začátek
Zobrazit: