Exportovat (0) Tisk
Rozbalit vše
Tento článek byl přeložen strojově počítačem. Původní text zobrazíte přesunutím ukazatele myši nad jednotlivé věty článku. Další informace
Překlad
Originál

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

Získá typ se zadaným názvem určující, zda provádět hledání velká a malá písmena a zda chcete vyvolat výjimku, pokud není nalezen požadovaný typ a volitelně poskytnout vlastní metody ř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
Typ: System.String
Název typu získat. Pokud typeResolver je-li zadán parametr, zadejte název může být libovolný řetězec, který typeResolver je schopen vyřešit. Pokud assemblyResolver za předpokladu, nebo pokud je použit standardní typ rozlišení, je parametr typeName musí být pro sestavení kvalifikovaný název (viz AssemblyQualifiedName), pokud je typ v aktuálně vykonávajícího sestavení nebo knihovny Mscorlib.dll, která stačí zadat název typu případ kvalifikován jeho obor názvů.
assemblyResolver
Typ: System.Func<AssemblyName, Assembly>
Metoda, která vyhledá a vrátí zadaný v sestavení 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í rozlišení je provedeno.
Upozornění: Nepředávejte metody od neznámých a nedůvěryhodných volajících metod. To může vést ke zvýšení úrovně oprávnění pro škodlivý kód. Používejte pouze metody, které sami poskytnete nebo které znáte.
typeResolver
Typ: System.Func<Assembly, String, Boolean, Type>
Metoda, která vyhledá a vrátí typ, který je určen typeName ze sestavení, který je vrácen vlastností assemblyResolver , nebo standardní sestavení řešení. Pokud žádné sestavení metoda může poskytnout jedno. Tato metoda také přebírá parametr, který určuje, zda hledá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 metod.
throwOnError
Typ: System.Boolean
true Chcete-li vyvolat výjimku, pokud nelze najít typ; falseChcete-li vrátit null. Použití hodnoty false potlačí i některé další podmínky výjimek, nikoli však všechny. Viz část Výjimky.
ignoreCase
Typ: System.Boolean
true k hledání velká a malá písmena pro typeName, false k hledání velká a malá písmena pro typeName.

Vrácená hodnota

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

VýjimkaPodmínka
ArgumentNullException

typeName je null.

TargetInvocationException

Je vyvolán inicializátor třídy, který vyvolá výjimku.

TypeLoadException

Parametr throwOnError má hodnotu true a nebyl nalezen typ.

-nebo-

Parametr throwOnError má hodnotu true a hodnota typeName obsahuje neplatné znaky, například vložený znak tabulátoru.

-nebo-

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

-nebo-

Parametr throwOnError má hodnotu true a parametr typeName reprezentuje typ pole s neplatnou velikostí.

-nebo-

typeName reprezentuje pole prvků TypedReference.

ArgumentException

Dojde k chybě při typeName je analyzován do zadejte název a název sestavení (například pokud jednoduchý typ název obsahuje speciální znak znakem).

-nebo-

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

-nebo-

typeName reprezentuje obecný typ, u něhož je jedním z argumentů typu typ ukazatele, typ ByRef nebo typ Void.

-nebo-

typeName reprezentuje obecný typ s nesprávným počtem argumentů typu.

-nebo-

typeName reprezentuje obecný typ, u nějž některý z argumentů typu nevyhovuje omezením pro odpovídající parametr typu.

FileNotFoundException

Parametr throwOnError má hodnotu true a nebylo nalezeno sestavení nebo některý z prvků, na kterých je závislé.

FileLoadException

Sestavení nebo některý prvek, na kterém závisí, byly nalezeny, ale nepodařilo se je načíst.

-nebo-

typeNameObsahuje-li název neplatný sestavení.

-nebo-

typeNameje platný název sestavení bez názvu typu.

BadImageFormatException

Sestavení nebo některý objekt, na kterém závisí, nejsou platné.

-nebo-

Sestavení bylo zkompilováno pomocí novější verze modulu CLR (Common Language Runtime), než je aktuálně načtená verze.

Pomocí tohoto přetížení metody 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)) Chcete-li nahradit výchozí provádění GetType metodou s implementací pružnější. Poskytnutím vlastní metody, které vyřešit zadejte jména a názvy sestavení, které je obsahují, můžete provést následující:

  • Určit, která verze sestavení je načten typ z.

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

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

  • Vrátit podtříd System.Type nejsou vytvořený společný jazykový modul runtime (CLR).

Například ve verzi chybám serializace tato metoda umožňuje vyhledávání pomocí částečného názvu pro sestavení "nejvhodnější". Další přetížení GetType metoda vyžaduje název typu kvalifikované sestavení, která obsahuje číslo verze.

Alternativní implementace systému typu muset vrátit podtříd System.Type , nejsou vytvořeny modulem CLR; všechny typy, které jsou vráceny pomocí další přetížení GetType metody jsou typy za běhu.

Poznámky k použití

Tato metoda přetížení a jejich přidružené přetížení parse typeName do názvu, typu a názvu sestavení a potom přeložit názvy. Překlad názvu sestavení rozlišení názvu typu předchází, protože musí přeložit název typu v rámci sestavení.

PoznámkaPoznámka

Pojem typu kvalifikované sestavení názvy neznáte, naleznete AssemblyQualifiedName vlastnost.

Pokud typeName není sestavení kvalifikovaný název sestavení rozlišení je přeskočen. Možné přeložit neúplný název typu jména v souvislosti s Mscorlib.dll nebo aktuálně vykonávajícího sestavení nebo v sestavení Volitelně můžete zadat typeResolver parametr. Účinky zahrnutím nebo vynecháním název sestavení pro různé druhy překlad se zobrazí jako tabulka Smíšené překlad oddílu.

Obecné použití poznámek:

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

    Poznámka k upozorněníUpozornění

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

  • Pokud vynecháte assemblyResolver a typeResolver parametry, hodnoty throwOnError je předán parametr metody, které provádějí výchozí rozlišení.

  • If throwOnError is true, this method throws a TypeLoadException when typeResolver returns null, and a FileNotFoundException when assemblyResolver returns null.

  • Tato metoda není zachytit výjimky vyvolané assemblyResolver a typeResolver. Jste odpovědní za všechny výjimky, které jsou vyvolány pomocí metody resolver.

Ee332784.collapse_all(cs-cz,VS.110).gifŘešení sestavení

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

Pokud assemblyResolver není zadaný, standardní sestavení zjišťování slouží k vyhledání sestavení. Pokud assemblyResolver je k dispozici, GetType metoda neprovádí standardní zjišťování; v takovém případě musí zajistit, aby vaše assemblyResolver zpracovat všechna sestavení předat ji.

assemblyResolver Metoda by měla vracet null Pokud nelze přeložit sestavení. Pokud assemblyResolver vrátí null, typeResolver se nazývá Ne a dojde k žádné další zpracování; Navíc pokud throwOnError je true, FileNotFoundException je vyvolána.

Pokud AssemblyName který je předán assemblyResolver částečné jméno, jeden nebo více jeho části jsou null. Například, pokud nemá žádná verze Version je null. Pokud Version vlastnost, CultureInfo vlastnosti a GetPublicKeyToken všechny vrácené metodou null, pak byla zadána pouze jednoduchý název sestavení. assemblyResolver Metodu lze použít, nebo ignorovat všechny části názvu sestavení.

Účinky možnosti rozlišení různých sestavení jsou zobrazeny jako tabulka Smíšené překlad oddíl pro názvy typů jednoduchých a kvalifikované sestavení.

Ee332784.collapse_all(cs-cz,VS.110).gifŘešení typů

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

typeResolver Metoda obdrží tři argumenty:

  • Sestavení hledání nebo null -li typeName neobsahuje název sestavení.

  • Jednoduchý název typu. U vnořeného typu je to nejvzdálenější nadřazeného typu. U obecného typu je to jednoduchý název obecného typu.

  • Logická hodnota, která je true Pokud je ignorována případ názvy typů.

Provedení určuje způsob, jakým se používají následující argumenty. typeResolver Metoda by měla vracet null Pokud nelze přeložit typ. If typeResolver returns null and throwOnError is true, this overload of GetType throws a TypeLoadException.

Účinky jiného typu možnosti rozlišení jsou zobrazeny jako tabulka Smíšené překlad oddíl pro názvy typů jednoduchých a kvalifikované sestavení.

Ee332784.collapse_all(cs-cz,VS.110).gifŘešení vnořených typů

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

Ee332784.collapse_all(cs-cz,VS.110).gifŘešení obecných typů

GetType Tdidisconnect() obecné typy řešení: nejprve k přeložit obecný typ a pak vyřešit jeho argumenty typu. Pokud argument typ je obecná, GetType tdidisconnect() vyřešit argumenty typu, atd.

Kombinace assemblyResolver a typeResolver zadání musí být schopna všechny úrovně této rekurze. Předpokládejme například, že zadáte assemblyResolver ovládá načítání MyAssembly. Předpokládejme, že chcete přeložit obecný typ 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 kvalifikované sestavení typu argument. Názvy Dictionary<TKey, TValue> a String třídy nejsou kvalifikované sestavení. Vaše typeResolver musí být možné popisovač buď sestavení nebo null, protože dostane null k Dictionary<TKey, TValue> a String. Tento případ je schopen zpracovat voláním přetížení GetType metoda, která přebírá řetězec, protože jsou obě typu neúplných názvů 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í volána metoda typ slovníku a typu řetězec, protože tyto názvy typu nejsou kvalifikované sestavení.

Nyní předpokládejme, že místo System.String, je první argument obecný typ 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ě vykonávajícího sestavení, nelze vyřešit YourType bez názvu kvalifikované sestavení. Protože vaše assemblyResolve bude volat rekurzivně, musí být schopen zpracovat tento případ. Místo vrácení null pro sestavení než MyAssembly, nyní provádí načíst 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
                      ); 


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

Ee332784.collapse_all(cs-cz,VS.110).gifŘešení názvů typů se speciálními znaky

Některé znaky mají zvláštní význam v sestavení kvalifikované názvy. Obsahuje-li název jednoduchého typu tyto znaky, znaky při jednoduchý název je součástí názvu sestavení kvalifikované způsobit chyby analyzátoru. Chcete-li zabránit chyby analyzátoru, musí uniknout speciální znaky lomítko před předáte název sestavení kvalifikované GetType metody. Například pokud je název typu Strange]Type, řídicí znak musí být přidána před hranatá závorka takto: Strange\]Type.

PoznámkaPoznámka

Názvy speciálních znaků, nelze vytvořit v jazyce Visual Basic nebo C#, ale mohou být vytvořeny pomocí Microsoft zprostředkující jazyk (MSIL) nebo vydání dynamického sestavení.

V následující tabulce jsou uvedeny speciální znaky pro názvy typů.

Znak

Význam

, (čárka)

Oddělovač názvů kvalifikované sestavení.

[] (hranaté závorky)

Jako přípona pár označuje typ pole; jako oddělovač pár ohraničuje seznamů generického argumentů a názvů kvalifikované sestavení.

& (ampersand)

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

* (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 AssemblyQualifiedName return uvozena správně řetězce. Musí projít správně řídící řetězce, které se GetType metody. Naopak GetType metoda předá správně řídící názvy typeResolver a výchozí typ rozlišení metod. Pokud potřebujete porovnat název znakem názvu v typeResolver, je nutné odebrat znaky escape.

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

Řešení smíšených názvů

Následující tabulka shrnuje interakce mezi assemblyResolver, typeResolvera výchozí název rozlišení pro všechny kombinace názvu typu a názvu sestavení v typeName:

Název typu obsahu

Metoda překládání sestavení

Typ metody resolver

Výsledek

typ, sestavení

null

null

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

typ, sestavení

k dispozici

null

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

typ, sestavení

null

k dispozici

Ekvivalentní název sestavení pro převod AssemblyName objektu a volání Assembly.Load(AssemblyName) přetížení metody k získání sestavení. Pokud je sestavení vyřešen, je předána typeResolver; jinak typeResolver není volána, a neexistuje žádný další pokus o řešení typu.

typ, sestavení

k dispozici

k dispozici

assemblyResolverVrátí sestavení nebo vrátí null Pokud nelze přeložit sestavení. Pokud je sestavení vyřešen, je předána typeResolver; jinak typeResolver není volána, a neexistuje žádný další pokus o řeš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 prohledány pouze Mscorlib.dll a aktuálně vykonávajícího sestavení. Pokud assemblyResolver je k dispozici, je ignorována.

typ

null, k dispozici

k dispozici

typeResolverje volána, a null je předaná pro sestavení. typeResolverTyp může poskytnout z libovolné sestavení včetně sestavení, který načte pro tento účel. Pokud assemblyResolver je k dispozici, je ignorována.

assembly

null, k dispozici

null, k dispozici

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

Zpět na: poznámky použití, řešení sestavení, řešení typy.

.NET Framework

Podporováno v: 4.5.2, 4.5.1, 4.5, 4

.NET Framework Client Profile

Podporováno v: 4

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (role Server Core není podporována), Windows Server 2008 R2 (role Server Core je podporována s aktualizací SP1 nebo novější, architektura Itanium není podporována)

.NET Framework nepodporuje některé verze platforem. Seznam podporovaných verzí naleznete v tématu .NET – požadavky na systém.

Obsah vytvořený komunitou

Přidat
Zobrazit:
© 2014 Microsoft