Type.GetType Metódus
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
Type Lekéri a megadott típust képviselő objektumot.
Túlterhelések
| Name | Description |
|---|---|
| GetType() |
Lekéri az aktuálisat Type. |
| GetType(String) |
Lekéri a Type megadott nevet, és kis- és nagybetűkre érzékeny keresést hajt végre. |
| GetType(String, Boolean) |
Lekéri a Type megadott nevet, kis- és nagybetűkre érzékeny keresést hajt végre, és megadja, hogy kivételt adjon-e, ha a típus nem található. |
| GetType(String, Boolean, Boolean) |
Lekéri a Type megadott nevet, megadva, hogy kivételt kell-e tenni, ha a típus nem található, és hogy kis- és nagybetűkre érzékeny keresést hajt-e végre. |
| GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>) |
Lekéri a típust a megadott névvel, opcionálisan egyéni metódusokkal oldja fel a szerelvényt és a típust. |
| GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean) |
Lekéri a típust a megadott névvel, megadva, hogy a típus nem található-e kivételt, és opcionálisan egyéni metódusokat biztosít a szerelvény és a típus feloldásához. |
| GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) |
Lekéri a típust a megadott névvel, megadva, hogy kis- és nagybetűkre érzékeny keresést hajtson-e végre, és kivételt adjon-e, ha a típus nem található, és opcionálisan egyéni metódusokat is megadhat a szerelvény és a típus feloldásához. |
GetType()
- Forrás:
- Type.cs
- Forrás:
- Type.cs
- Forrás:
- Type.cs
- Forrás:
- Type.cs
- Forrás:
- Type.cs
Lekéri az aktuálisat Type.
public:
Type ^ GetType();
public:
virtual Type ^ GetType();
public Type GetType();
override this.GetType : unit -> Type
Public Function GetType () As Type
Válaszok
Az aktuális Type.
Megvalósítás
Kivételek
A rendszer meghív egy osztály inicializálót, és kivételt jelez.
Lásd még
A következőre érvényes:
GetType(String)
- Forrás:
- Type.CoreCLR.cs
- Forrás:
- Type.CoreCLR.cs
- Forrás:
- Type.CoreCLR.cs
- Forrás:
- Type.CoreCLR.cs
- Forrás:
- Type.CoreCLR.cs
Lekéri a Type megadott nevet, és kis- és nagybetűkre érzékeny keresést hajt végre.
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
Paraméterek
- typeName
- String
A lekérendő típus szerelvény-minősített neve. Lásd a(z) AssemblyQualifiedName. Ha a típus a jelenleg futó szerelvényben vagy mscorlib.dll/System.Private.CoreLib.dlltalálható, elegendő megadni a névtér által minősített típusnevet.
Válaszok
A megadott névvel rendelkező típus, ha megtalálható; egyéb esetben. null
- Attribútumok
Kivételek
typeName az null.
A rendszer meghív egy osztály inicializálót, és kivételt jelez.
typeName olyan általános típust jelöl, amely mutatótípussal, ByRef típussal vagy Void annak egyik típusargumentumaként rendelkezik.
-vagy-
typeName olyan általános típust jelöl, amely helytelen számú típusargumentummal rendelkezik.
-vagy-
typeName egy általános típust jelöl, és az egyik típusargumentum nem felel meg a megfelelő típusparaméter korlátainak.
typeNameérvénytelen típust jelöl, például egy tömböt.TypedReference
A szerelvény vagy annak egyik függősége megtalálható, de nem tölthető be.
Megjegyzés: Az .NET Windows Áruházbeli alkalmazások vagy a Portable Class Library esetében inkább az alaposztály kivételét IOException.
A szerelvény nem érvényes az aktuálisan betöltött futtatókörnyezetre.
Példák
Az alábbi példa beolvassa a típust System.Int32 , és az adott típusú objektummal jeleníti meg a FullName tulajdonságot 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
Megjegyzések
A metódussal GetType beszerezhet egy objektumot egy Type másik szerelvény egy típusához, ha ismeri a szerelvény által minősített nevet, amely a következőből AssemblyQualifiedNamekérhető le: .
GetType a következőben megadott szerelvény betöltését typeNameokozza: A metódussal Assembly.Load egy szerelvényt is betölthet, majd az objektumokat a vagy Assembly.GetType a Assembly.GetTypes metódus használatával is lekérhetiType. Ha egy típus fordításkor a program által ismert szerelvényben található, akkor hatékonyabb a typeof használata C# nyelven vagy a Visual Basic GetType operátora.
Note
Ha typeName nem található, a metódus hívása GetType(String)nullad vissza. Nem ad kivételt. Annak szabályozásához, hogy a rendszer kivételt jelez-e, hívja meg a GetType paraméterrel throwOnError rendelkező metódus túlterhelését.
csak .NET keretrendszer: GetType csak lemezről betöltött szerelvényeken működik. Ha a szolgáltatások használatával GetType definiált dinamikus szerelvényben definiált típus keresésére hív System.Reflection.Emit fel, inkonzisztens viselkedést kaphat. A viselkedés attól függ, hogy a dinamikus szerelvény állandó-e, vagyis az RunAndSave enumerálás vagy Save a System.Reflection.Emit.AssemblyBuilderAccess hozzáférési módok használatával jön létre. Ha a dinamikus szerelvény állandó, és a meghívás előtt GetType lemezre lett írva, a betöltő megkeresi a lemezen mentett szerelvényt, betölti a szerelvényt, és lekéri a típust az adott szerelvényből. Ha a rendszer nem menti a szerelvényt a lemezre, amikor GetType meghívják, a metódus ad vissza null.
GetType nem érti az átmeneti dinamikus szerelvényeket; ezért egy átmeneti dinamikus szerelvény típusának lekérésére való hívás GetType eredménye null.
A .NET-keretrendszerben a GetType dinamikus modulon való használatához iratkozzon fel a AppDomain.AssemblyResolve eseményre, és mentsen GetType. Ellenkező esetben a szerelvény két példányát fogja megkapni a memóriában.
.NET Core 3.0-s és újabb verzióiban az API által aktivált szerelvényterheléseket a AssemblyLoadContext.CurrentContextualReflectionContext aktuális értéke befolyásolja.
Az alábbi táblázat azt mutatja be, hogy egy alaposztály mely tagjait adják vissza a metódusok egy Get típuson való tükrözéskor.
| Tagtípus | Static | Nem statikus |
|---|---|---|
| Constructor | No | No |
| Field | No | Yes. A mezők mindig név és aláírás alapján rejthetők el. |
| Esemény | Nem alkalmazható | A gyakori típusrendszerszabály az, hogy az öröklés megegyezik a tulajdonságot megvalósító metódusok öröklésével. A tükröződés a tulajdonságokat név és aláírás elrejtéseként kezeli. Lásd az alábbi 2. megjegyzést. |
| Módszer | No | Yes. A metódusok (mind a virtuális, mind a nem virtuális) elrejthetők név szerint vagy elrejthetők név és aláírás alapján. |
| Beágyazott típus | No | No |
| Ingatlan | Nem alkalmazható | A gyakori típusrendszerszabály az, hogy az öröklés megegyezik a tulajdonságot megvalósító metódusok öröklésével. A tükröződés a tulajdonságokat név és aláírás elrejtéseként kezeli. Lásd az alábbi 2. megjegyzést. |
A név és aláírás szerinti elrejtés az aláírás összes részét figyelembe veszi, beleértve az egyéni módosítókat, a visszatérési típusokat, a paramétertípusokat, a sentineleket és a nem kezelt hívási konvenciókat. Ez egy bináris összehasonlítás.
A reflexió során a tulajdonságok és események név és szignatúra szerint vannak elrejtve. Ha az alaposztálynak van egy beolvasási és egy beállítási kiegészítővel rendelkező tulajdonsága, de a származtatott osztálynak csak beolvasási kiegészítője van, a származtatott osztály tulajdonsága elrejti az alaposztály tulajdonságát, és nem tudja majd elérni a beállítót az alaposztályban.
Az egyéni attribútumok nem részei a gyakori típusrendszernek.
A rendszer csak akkor keres tömböket vagy COM-típusokat, ha már betöltötte őket az elérhető osztályok táblájába.
typeName lehet a névtér által minősített típusnév, vagy egy szerelvény által minősített név, amely tartalmazza a szerelvénynév specifikációját. Lásd a(z) AssemblyQualifiedName.
Ha typeName a névteret tartalmazza, de a szerelvény nevét nem, ez a metódus csak a hívó objektum szerelvényében keres, és ebben a sorrendben mscorlib.dll/System.Private.CoreLib.dll. Ha a typeName teljes mértékben a részleges vagy teljes szerelvénynévvel van minősítve, ez a metódus a megadott szerelvényben keres. Ha a szerelvénynek erős neve van, teljes szerelvénynévre van szükség.
A AssemblyQualifiedName tulajdonság egy teljesen minősített típusnevet ad vissza, beleértve a beágyazott típusokat, a szerelvény nevét és az általános típusargumentumokat. A közös nyelvi futtatókörnyezetet támogató összes fordító kibocsátja a beágyazott osztály egyszerű nevét, a tükröződés pedig a lekérdezéskor a következő konvencióknak megfelelően strukturált nevet hoz létre.
Note
A processzorarchitektúra a szerelvényidentitás része, és szerelvénynév-sztringek részeként adható meg. Például: "ProcessorArchitecture=msil". Kompatibilitási okokból azonban nem szerepel a AssemblyQualifiedName tulajdonság által visszaadott sztringben. A típusokat úgy is betöltheti, hogy létrehoz egy AssemblyName objektumot, és átadja azt a Load metódus megfelelő túlterhelésének. Ezután a metódus használatával betöltheti a Assembly.GetType típusokat a szerelvényből. Lásd még: AssemblyName.ProcessorArchitecture.
| Határoló | Értelmezés |
|---|---|
| Fordított perjel (\) | Escape karakter. |
| Backtick (') | Egy vagy több számjegyet előz meg, amely egy általános típus nevének végén található típusparaméterek számát jelöli. |
| Szögletes zárójelek ([]) | Általános típusú argumentumlistát csatol egy létrehozott általános típushoz; egy típusargumentumlistán belül csatoljon egy szerelvény által minősített típust. |
| Vessző (,) | Megelőzi a szerelvény nevét. |
| Időszak (.) | Névtérazonosítókat jelöl. |
| Pluszjel (+) | Beágyazott osztályt előz meg. |
Egy osztály teljes neve például így nézhet ki:
TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly
Ha a névtér TopNamespace.Sub+Namespace, akkor a sztringnek a pluszjel (+) elé kell lépnie egy escape karakterrel (\), hogy ne lehessen beágyazott elválasztóként értelmezni. A tükröződés a következőképpen bocsátja ki ezt a sztringet:
TopNamespace.Sub\+Namespace.ContainingClass+NestedClass,MyAssembly
A "++" "\+\+" lesz, a "\" pedig "\\\" lesz.
Ez a minősített név megőrizhető, és később használható a Type. A kereséshez és a betöltéshez Typehasználja GetType csak a típusnevet, vagy a szerelvény minősített típusnevét. GetType a típusnévvel csak a Type hívó szerelvényében, majd a Rendszerszerelvényben fogja keresni. GetType A szerelvény minősített típusnevével bármelyik szerelvényben megkeresi a Type szerelvényt.
A típusnevek tartalmazhatnak olyan záró karaktereket, amelyek a típussal kapcsolatos további információkat jelölnek, például azt, hogy a típus hivatkozástípus, mutatótípus vagy tömbtípus-e. Ha a típusnevet a záró karakterek nélkül szeretné lekérni, használja t.GetElementType().ToString()a következőt: hol t található a típus.
A szóközök a szerelvény neve kivételével minden típusnév-összetevőben relevánsak. A szerelvény nevében a "," elválasztó előtti szóközök relevánsak, de a "," elválasztó utáni szóközök figyelmen kívül lesznek hagyva.
Az általános típus neve egy háttérrel (') végződik, amelyet az általános típusú argumentumok számát jelző számjegyek követnek. Ennek a névkezelésnek az a célja, hogy lehetővé tegye a fordítók számára, hogy azonos nevű, de különböző számú típusparaméterrel rendelkező általános típusokat támogassanak, amelyek ugyanabban a hatókörben fordulnak elő. A tükröződés például a Tuple`1 és a Tuple`2 nevet adja vissza az általános Tuple(Of T) és Tuple(Of T0, T1) Visual Basic, vagy Tuple<T> és Tuple<T0, T1> a Visual C#-ban.
Általános típusok esetén a típusargumentumok listája szögletes zárójelek közé kerül, a típusargumentumokat pedig vesszők választják el egymástól. Egy általános Dictionary<TKey,TValue> típusparaméter például két típusparaméterrel rendelkezik. A Dictionary<TKey,TValue> típuskulcsok MyType közül String a következők jelölhetők:
System.Collections.Generic.Dictionary`2[System.String,MyType]
Ha egy szerelvény-minősített típust szeretne megadni egy típusargumentumlistában, a szerelvény által minősített típust zárójelek közé kell foglalnia. Ellenkező esetben a szerelvény által minősített név részeit elválasztó vesszőket a rendszer további típusargumentumok elválasztójaként értelmezi. Például egy Dictionary<TKey,TValue>MyType fromMyAssembly.dlltípuskulcsokkal Stringa következőképpen adható meg:
Type.GetType("System.Collections.Generic.Dictionary`2[System.String,[MyType,MyAssembly]]")
Note
A szerelvény-minősített típus csak akkor zárható szögletes zárójelbe, ha egy típusparaméter-listában jelenik meg. A típusparaméter-listákban a szerelvényekben a minősített és a nem minősített típusok keresésére vonatkozó szabályok megegyeznek a minősített és a nem minősített nemgenerikus típusok szabályaival.
A null értékű típusok az általános típusok speciális esetei. A null értékű értékeket Int32 például a "System.Nullable'1[System.Int32]" sztring jelöli.
Note
A null értékű típusokat típusoperátorok használatával is lekérheti. A null értékű Boolean típust például a C# typeof(Nullable<bool>) és GetType(Nullable(Of Boolean)) adja vissza Visual Basic.
Az alábbi táblázat a különböző típusokhoz GetType használt szintaxist mutatja be.
| A lekéréshez | Használd |
|---|---|
| Null értékű Int32 | Type.GetType("System.Nullable`1[System.Int32]") |
Nem felügyelt mutató a MyType |
Type.GetType("MyType*") |
Nem felügyelt mutató egy mutatóra MyType |
Type.GetType("MyType**") |
Felügyelt mutató vagy hivatkozás MyType |
Type.GetType("MyType&"). Vegye figyelembe, hogy a mutatókkal ellentétben a hivatkozások egy szintre korlátozódnak. |
| Szülőosztály és beágyazott osztály | Type.GetType("MyParentClass+MyNestedClass") |
| Egydimenziós tömb 0 alsó határával | Type.GetType("MyType[]") |
| Ismeretlen alsó határral rendelkező egydimenziós tömb | Type.GetType("MyType[*]") |
| N dimenziós tömb | A zárójeleken belüli vessző (,) összesen n-1 alkalommal. Például System.Object[,,] egy háromdimenziós Object tömböt jelöl. |
| Egydimenziós tömbök tömbje | Type.GetType("MyType[][]") |
| Négyszögletes kétdimenziós tömb ismeretlen alsó határokkal | Type.GetType("MyType[,]") |
| Egy általános típus egy típusargumentummal | Type.GetType("MyGenericType`1[MyType]") |
| Általános típus két típusargumentummal | Type.GetType("MyGenericType`2[MyType,AnotherType]") |
| Általános típus két szerelvény-minősített típusargumentummal | Type.GetType("MyGenericType`2[[MyType,MyAssembly],[AnotherType,AnotherAssembly]]") |
| Szerelvény-minősített általános típus szerelvény-minősített típusargumentummal | Type.GetType("MyGenericType`1[[MyType,MyAssembly]],MyGenericTypeAssembly") |
| Olyan általános típus, amelynek típusargumentuma egy általános típus, két típusargumentummal | Type.GetType("MyGenericType`1[AnotherGenericType`2[MyType,AnotherType]]") |
Lásd még
- String
- TypeLoadException
- AssemblyQualifiedName
- GetAssembly(Type)
- GetType(String)
- AssemblyName
- Teljes típusnevek megadása
A következőre érvényes:
GetType(String, Boolean)
- Forrás:
- Type.CoreCLR.cs
- Forrás:
- Type.CoreCLR.cs
- Forrás:
- Type.CoreCLR.cs
- Forrás:
- Type.CoreCLR.cs
- Forrás:
- Type.CoreCLR.cs
Lekéri a Type megadott nevet, kis- és nagybetűkre érzékeny keresést hajt végre, és megadja, hogy kivételt adjon-e, ha a típus nem található.
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
Paraméterek
- typeName
- String
A lekérendő típus szerelvény-minősített neve. Lásd a(z) AssemblyQualifiedName. Ha a típus a jelenleg futó szerelvényben vagy mscorlib.dll/System.Private.CoreLib.dlltalálható, elegendő megadni a névtér által minősített típusnevet.
- throwOnError
- Boolean
true kivétel kiírása, ha a típus nem található; false visszatéréshez null. A beállítás false néhány egyéb kivételfeltételt is letilt, de nem mindegyiket. Lásd a Kivételek szakaszt.
Válaszok
A megadott névvel rendelkező típus. Ha a típus nem található, a throwOnError paraméter megadja, hogy a rendszer visszaadja-e null a hibát, vagy kivételt jelez. Bizonyos esetekben a rendszer kivételt vet ki, függetlenül az értéktől throwOnError. Lásd a Kivételek szakaszt.
- Attribútumok
Kivételek
typeName az null.
A rendszer meghív egy osztály inicializálót, és kivételt jelez.
throwOnError és true a típus nem található.
-vagy-
throwOnError
true érvénytelen typeName karaktereket tartalmaz, például beágyazott lapot.
-vagy-
throwOnError
true üres typeName sztring.
-vagy-
throwOnError
true érvénytelen typeName méretű tömbtípust jelöl.
-vagy-
typeNameegy tömböt jelöl.TypedReference
throwOnError
true érvénytelen typeName szintaxist tartalmaz. Például: "MyType[,*;]".
-vagy-
typeName olyan általános típust jelöl, amely mutatótípussal, ByRef típussal vagy Void annak egyik típusargumentumaként rendelkezik.
-vagy-
typeName olyan általános típust jelöl, amely helytelen számú típusargumentummal rendelkezik.
-vagy-
typeName egy általános típust jelöl, és az egyik típusargumentum nem felel meg a megfelelő típusparaméter korlátainak.
throwOnError van, true és a szerelvény vagy annak egyik függősége nem található.
A szerelvény vagy annak egyik függősége megtalálható, de nem tölthető be.
Megjegyzés: Az .NET Windows Áruházbeli alkalmazások vagy a Portable Class Library esetében inkább az alaposztály kivételét IOException.
A szerelvény vagy annak egyik függősége nem érvényes az aktuálisan betöltött futtatókörnyezetre.
Példák
Az alábbi példa beolvassa a típust System.Int32 , és az adott típusú objektummal jeleníti meg a FullName tulajdonságot System.Int32. Ha egy típusobjektum olyan szerelvényre hivatkozik, amely nem létezik, ez a példa kivételt vet fel.
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
Megjegyzések
A metódussal GetType beszerezhet egy objektumot egy Type másik szerelvény egy típusához, ha ismeri a szerelvény által minősített nevet, amely a következőből AssemblyQualifiedNamekérhető le: .
GetType a következőben megadott szerelvény betöltését typeNameokozza: A metódussal Assembly.Load egy szerelvényt is betölthet, majd az objektumokat a vagy Assembly.GetType a Assembly.GetTypes metódus használatával is lekérhetiType. Ha egy típus fordításkor a program által ismert szerelvényben található, akkor hatékonyabb a typeof használata C# nyelven vagy a Visual Basic GetType operátora.
csak .NET keretrendszer: GetType csak lemezről betöltött szerelvényeken működik. Ha a szolgáltatások használatával GetType definiált dinamikus szerelvényben definiált típus keresésére hív System.Reflection.Emit fel, inkonzisztens viselkedést kaphat. A viselkedés attól függ, hogy a dinamikus szerelvény állandó-e, vagyis az RunAndSave enumerálás vagy Save a System.Reflection.Emit.AssemblyBuilderAccess hozzáférési módok használatával jön létre. Ha a dinamikus szerelvény állandó, és a meghívás előtt GetType lemezre lett írva, a betöltő megkeresi a lemezen mentett szerelvényt, betölti a szerelvényt, és lekéri a típust az adott szerelvényből. Ha a rendszer nem menti a szerelvényt a lemezre, amikor GetType meghívják, a metódus ad vissza null.
GetType nem érti az átmeneti dinamikus szerelvényeket; ezért egy átmeneti dinamikus szerelvény típusának lekérésére való hívás GetType eredménye null.
A .NET-keretrendszerben a GetType dinamikus modulon való használatához iratkozzon fel a AppDomain.AssemblyResolve eseményre, és mentsen GetType. Ellenkező esetben a szerelvény két példányát fogja megkapni a memóriában.
.NET Core 3.0-s és újabb verzióiban az API által aktivált szerelvényterheléseket a AssemblyLoadContext.CurrentContextualReflectionContext aktuális értéke befolyásolja.
A throwOnError paraméter megadja, hogy mi történik, ha a típus nem található, és letilt bizonyos egyéb kivételfeltételeket is, a Kivételek szakaszban leírtak szerint. Néhány kivételt a rendszer a megadott értéktől throwOnErrorfüggetlenül ad ki. Ha például a típus megtalálható, de nem tölthető be, a rendszer akkor is eldobja a típust, TypeLoadException ha throwOnError igen false.
Az alábbi táblázat azt mutatja be, hogy egy alaposztály mely tagjait adják vissza a metódusok egy Get típuson való tükrözéskor.
| Tagtípus | Static | Nem statikus |
|---|---|---|
| Constructor | No | No |
| Field | No | Yes. A mezők mindig név és aláírás alapján rejthetők el. |
| Esemény | Nem alkalmazható | A gyakori típusrendszerszabály az, hogy az öröklés megegyezik a tulajdonságot megvalósító metódusok öröklésével. A tükröződés a tulajdonságokat név és aláírás elrejtéseként kezeli. Lásd az alábbi 2. megjegyzést. |
| Módszer | No | Yes. A metódusok (mind a virtuális, mind a nem virtuális) elrejthetők név szerint vagy elrejthetők név és aláírás alapján. |
| Beágyazott típus | No | No |
| Ingatlan | Nem alkalmazható | A gyakori típusrendszerszabály az, hogy az öröklés megegyezik a tulajdonságot megvalósító metódusok öröklésével. A tükröződés a tulajdonságokat név és aláírás elrejtéseként kezeli. Lásd az alábbi 2. megjegyzést. |
A név és aláírás szerinti elrejtés az aláírás összes részét figyelembe veszi, beleértve az egyéni módosítókat, a visszatérési típusokat, a paramétertípusokat, a sentineleket és a nem kezelt hívási konvenciókat. Ez egy bináris összehasonlítás.
A reflexió során a tulajdonságok és események név és szignatúra szerint vannak elrejtve. Ha az alaposztálynak van egy beolvasási és egy beállítási kiegészítővel rendelkező tulajdonsága, de a származtatott osztálynak csak beolvasási kiegészítője van, a származtatott osztály tulajdonsága elrejti az alaposztály tulajdonságát, és nem tudja majd elérni a beállítót az alaposztályban.
Az egyéni attribútumok nem részei a gyakori típusrendszernek.
A rendszer csak akkor keres tömböket vagy COM-típusokat, ha már betöltötte őket az elérhető osztályok táblájába.
typeName lehet a névtér által minősített típusnév, vagy egy szerelvény által minősített név, amely tartalmazza a szerelvénynév specifikációját. Lásd a(z) AssemblyQualifiedName.
Ha typeName a névteret tartalmazza, de a szerelvény nevét nem, ez a metódus csak a hívó objektum szerelvényében keres, és ebben a sorrendben mscorlib.dll/System.Private.CoreLib.dll. Ha a typeName teljes mértékben a részleges vagy teljes szerelvénynévvel van minősítve, ez a metódus a megadott szerelvényben keres. Ha a szerelvénynek erős neve van, teljes szerelvénynévre van szükség.
A AssemblyQualifiedName tulajdonság egy teljesen minősített típusnevet ad vissza, beleértve a beágyazott típusokat, a szerelvény nevét és az általános argumentumokat. A közös nyelvi futtatókörnyezetet támogató összes fordító kibocsátja a beágyazott osztály egyszerű nevét, a tükröződés pedig a lekérdezéskor a következő konvencióknak megfelelően strukturált nevet hoz létre.
Note
A processzorarchitektúra a szerelvényidentitás része, és szerelvénynév-sztringek részeként adható meg. Például: "ProcessorArchitecture=msil". Kompatibilitási okokból azonban nem szerepel a AssemblyQualifiedName tulajdonság által visszaadott sztringben. A típusokat úgy is betöltheti, hogy létrehoz egy AssemblyName objektumot, és átadja azt a Load metódus megfelelő túlterhelésének. Ezután a metódus használatával betöltheti a Assembly.GetType típusokat a szerelvényből. Lásd még: AssemblyName.ProcessorArchitecture.
| Határoló | Értelmezés |
|---|---|
| Fordított perjel (\) | Escape karakter. |
| Backtick (') | Egy vagy több számjegyet előz meg, amely egy általános típus nevének végén található típusparaméterek számát jelöli. |
| Szögletes zárójelek ([]) | Általános típusú argumentumlistát csatol egy létrehozott általános típushoz; egy típusargumentumlistán belül csatoljon egy szerelvény által minősített típust. |
| Vessző (,) | Megelőzi a szerelvény nevét. |
| Időszak (.) | Névtérazonosítókat jelöl. |
| Pluszjel (+) | Beágyazott osztályt előz meg. |
Egy osztály teljes neve például így nézhet ki:
TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly
Ha a névtér TopNamespace.Sub+Namespace, akkor a sztringnek a pluszjel (+) elé kell lépnie egy escape karakterrel (\), hogy ne lehessen beágyazott elválasztóként értelmezni. A tükröződés a következőképpen bocsátja ki ezt a sztringet:
TopNamespace.Sub\+Namespace.ContainingClass+NestedClass,MyAssembly
A "++" "\+\+" lesz, a "\" pedig "\\\" lesz.
Ez a minősített név megőrizhető, és később használható a Type. A kereséshez és a betöltéshez Typehasználja GetType csak a típusnevet, vagy a szerelvény minősített típusnevét. GetType a típusnévvel csak a Type hívó szerelvényében, majd a Rendszerszerelvényben fogja keresni. GetType A szerelvény minősített típusnevével bármelyik szerelvényben megkeresi a Type szerelvényt.
A típusnevek tartalmazhatnak olyan záró karaktereket, amelyek a típussal kapcsolatos további információkat jelölnek, például azt, hogy a típus hivatkozástípus, mutatótípus vagy tömbtípus-e. Ha a típusnevet a záró karakterek nélkül szeretné lekérni, használja t.GetElementType().ToString()a következőt: hol t található a típus.
A szóközök a szerelvény neve kivételével minden típusnév-összetevőben relevánsak. A szerelvény nevében a "," elválasztó előtti szóközök relevánsak, de a "," elválasztó utáni szóközök figyelmen kívül lesznek hagyva.
Az általános típus neve egy háttérrel (') végződik, amelyet az általános típusú argumentumok számát jelző számjegyek követnek. Ennek a névkezelésnek az a célja, hogy lehetővé tegye a fordítók számára, hogy azonos nevű, de különböző számú típusparaméterrel rendelkező általános típusokat támogassanak, amelyek ugyanabban a hatókörben fordulnak elő. A tükröződés például a Tuple`1 és a Tuple`2 nevet adja vissza az általános Tuple(Of T) és Tuple(Of T0, T1) Visual Basic, vagy Tuple<T> és Tuple<T0, T1> a Visual C#-ban.
Általános típusok esetén a típusargumentumok listája szögletes zárójelek közé kerül, a típusargumentumokat pedig vesszők választják el egymástól. Egy általános Dictionary<TKey,TValue> típusparaméter például két típusparaméterrel rendelkezik. A Dictionary<TKey,TValue> típuskulcsok MyType közül String a következők jelölhetők:
System.Collections.Generic.Dictionary`2[System.String,MyType]
Ha egy szerelvény-minősített típust szeretne megadni egy típusargumentumlistában, a szerelvény által minősített típust zárójelek közé kell foglalnia. Ellenkező esetben a szerelvény által minősített név részeit elválasztó vesszőket a rendszer további típusargumentumok elválasztójaként értelmezi. Például egy Dictionary<TKey,TValue>MyType MyAssembly.dlltípusú kulcsokat Stringtartalmazó MyAssembly.dllaz alábbiak szerint adható meg:
Type.GetType("System.Collections.Generic.Dictionary`2[System.String,[MyType,MyAssembly]]")
Note
A szerelvény-minősített típus csak akkor zárható szögletes zárójelbe, ha egy típusparaméter-listában jelenik meg. A típusparaméter-listákban a szerelvényekben a minősített és a nem minősített típusok keresésére vonatkozó szabályok megegyeznek a minősített és a nem minősített nemgenerikus típusok szabályaival.
A null értékű típusok az általános típusok speciális esetei. A null értékű értékeket Int32 például a "System.Nullable'1[System.Int32]" sztring jelöli.
Note
A null értékű típusokat típusoperátorok használatával is lekérheti. A null értékű Boolean típust például a C# typeof(Nullable<bool>) és GetType(Nullable(Of Boolean)) adja vissza Visual Basic.
Az alábbi táblázat a különböző típusokhoz GetType használt szintaxist mutatja be.
| A lekéréshez | Használd |
|---|---|
| Null értékű Int32 | Type.GetType("System.Nullable`1[System.Int32]") |
Nem felügyelt mutató a MyType |
Type.GetType("MyType*") |
Nem felügyelt mutató egy mutatóra MyType |
Type.GetType("MyType**") |
Felügyelt mutató vagy hivatkozás MyType |
Type.GetType("MyType&"). Vegye figyelembe, hogy a mutatókkal ellentétben a hivatkozások egy szintre korlátozódnak. |
| Szülőosztály és beágyazott osztály | Type.GetType("MyParentClass+MyNestedClass") |
| Egydimenziós tömb 0 alsó határával | Type.GetType("MyArray[]") |
| Ismeretlen alsó határral rendelkező egydimenziós tömb | Type.GetType("MyArray[*]") |
| N dimenziós tömb | A zárójeleken belüli vessző (,) összesen n-1 alkalommal. Például System.Object[,,] egy háromdimenziós Object tömböt jelöl. |
| Kétdimenziós tömb tömbje | Type.GetType("MyArray[][]") |
| Négyszögletes kétdimenziós tömb ismeretlen alsó határokkal | Type.GetType("MyArray[,]") |
| Egy általános típus egy típusargumentummal | Type.GetType("MyGenericType`1[MyType]") |
| Általános típus két típusargumentummal | Type.GetType("MyGenericType`2[MyType,AnotherType]") |
| Általános típus két szerelvény-minősített típusargumentummal | Type.GetType("MyGenericType`2[[MyType,MyAssembly],[AnotherType,AnotherAssembly]]") |
| Szerelvény-minősített általános típus szerelvény-minősített típusargumentummal | Type.GetType("MyGenericType`1[[MyType,MyAssembly]],MyGenericTypeAssembly") |
| Olyan általános típus, amelynek típusargumentuma egy általános típus, két típusargumentummal | Type.GetType("MyGenericType`1[AnotherGenericType`2[MyType,AnotherType]]") |
Lásd még
- String
- TypeLoadException
- AssemblyQualifiedName
- GetAssembly(Type)
- GetType(String)
- AssemblyName
- Teljes típusnevek megadása
A következőre érvényes:
GetType(String, Boolean, Boolean)
- Forrás:
- Type.CoreCLR.cs
- Forrás:
- Type.CoreCLR.cs
- Forrás:
- Type.CoreCLR.cs
- Forrás:
- Type.CoreCLR.cs
- Forrás:
- Type.CoreCLR.cs
Lekéri a Type megadott nevet, megadva, hogy kivételt kell-e tenni, ha a típus nem található, és hogy kis- és nagybetűkre érzékeny keresést hajt-e végre.
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
Paraméterek
- typeName
- String
A lekérendő típus szerelvény-minősített neve. Lásd a(z) AssemblyQualifiedName. Ha a típus a jelenleg futó szerelvényben vagy mscorlib.dll/System.Private.CoreLib.dlltalálható, elegendő megadni a névtér által minősített típusnevet.
- throwOnError
- Boolean
true kivétel kiírása, ha a típus nem található; false visszatéréshez null. A beállítás false néhány egyéb kivételfeltételt is letilt, de nem mindegyiket. Lásd a Kivételek szakaszt.
- ignoreCase
- Boolean
truea kis- és nagybetűk megkülönböztetésére szolgáló keresés typeNamefalse végrehajtásához a kis- és nagybetűket megkülönböztető keresés végrehajtásáhoztypeName.
Válaszok
A megadott névvel rendelkező típus. Ha a típus nem található, a throwOnError paraméter megadja, hogy a rendszer visszaadja-e null a hibát, vagy kivételt jelez. Bizonyos esetekben a rendszer kivételt vet ki, függetlenül az értéktől throwOnError. Lásd a Kivételek szakaszt.
- Attribútumok
Kivételek
typeName az null.
A rendszer meghív egy osztály inicializálót, és kivételt jelez.
throwOnError és true a típus nem található.
-vagy-
throwOnError
true érvénytelen typeName karaktereket tartalmaz, például beágyazott lapot.
-vagy-
throwOnError
true üres typeName sztring.
-vagy-
throwOnError
true érvénytelen typeName méretű tömbtípust jelöl.
-vagy-
typeNameegy tömböt jelöl.TypedReference
throwOnError
true érvénytelen typeName szintaxist tartalmaz. Például: "MyType[,*;]".
-vagy-
typeName olyan általános típust jelöl, amely mutatótípussal, ByRef típussal vagy Void annak egyik típusargumentumaként rendelkezik.
-vagy-
typeName olyan általános típust jelöl, amely helytelen számú típusargumentummal rendelkezik.
-vagy-
typeName egy általános típust jelöl, és az egyik típusargumentum nem felel meg a megfelelő típusparaméter korlátainak.
throwOnError van, true és a szerelvény vagy annak egyik függősége nem található.
A szerelvény vagy annak egyik függősége megtalálható, de nem tölthető be.
A szerelvény nem érvényes az aktuálisan betöltött futtatókörnyezetre.
Megjegyzések
A metódussal GetType beszerezhet egy objektumot egy Type másik szerelvény egy típusához, ha ismeri a szerelvény által minősített nevet, amely a következőből AssemblyQualifiedNamekérhető le: .
GetType a következőben megadott szerelvény betöltését typeNameokozza: A metódussal Assembly.Load egy szerelvényt is betölthet, majd az objektumokat a vagy Assembly.GetType a Assembly.GetTypes metódus használatával is lekérhetiType. Ha egy típus fordításkor a program által ismert szerelvényben található, akkor hatékonyabb a typeof használata C# nyelven vagy a Visual Basic GetType operátora.
csak .NET keretrendszer: GetType csak lemezről betöltött szerelvényeken működik. Ha a szolgáltatások használatával GetType definiált dinamikus szerelvényben definiált típus keresésére hív System.Reflection.Emit fel, inkonzisztens viselkedést kaphat. A viselkedés attól függ, hogy a dinamikus szerelvény állandó-e, vagyis az RunAndSave enumerálás vagy Save a System.Reflection.Emit.AssemblyBuilderAccess hozzáférési módok használatával jön létre. Ha a dinamikus szerelvény állandó, és a meghívás előtt GetType lemezre lett írva, a betöltő megkeresi a lemezen mentett szerelvényt, betölti a szerelvényt, és lekéri a típust az adott szerelvényből. Ha a rendszer nem menti a szerelvényt a lemezre, amikor GetType meghívják, a metódus ad vissza null.
GetType nem érti az átmeneti dinamikus szerelvényeket; ezért egy átmeneti dinamikus szerelvény típusának lekérésére való hívás GetType eredménye null.
A .NET-keretrendszerben a GetType dinamikus modulon való használatához iratkozzon fel a AppDomain.AssemblyResolve eseményre, és mentsen GetType. Ellenkező esetben a szerelvény két példányát fogja megkapni a memóriában.
.NET Core 3.0-s és újabb verzióiban az API által aktivált szerelvényterheléseket a AssemblyLoadContext.CurrentContextualReflectionContext aktuális értéke befolyásolja.
A throwOnError paraméter megadja, hogy mi történik, ha a típus nem található, és letilt bizonyos egyéb kivételfeltételeket is, a Kivételek szakaszban leírtak szerint. Néhány kivételt a rendszer a megadott értéktől throwOnErrorfüggetlenül ad ki. Ha például a típus megtalálható, de nem tölthető be, a rendszer akkor is eldobja a típust, TypeLoadException ha throwOnError igen false.
Az alábbi táblázat azt mutatja be, hogy egy alaposztály mely tagjait adják vissza a metódusok egy Get típuson való tükrözéskor.
| Tagtípus | Static | Nem statikus |
|---|---|---|
| Constructor | No | No |
| Field | No | Yes. A mezők mindig név és aláírás alapján rejthetők el. |
| Esemény | Nem alkalmazható | A gyakori típusrendszerszabály az, hogy az öröklés megegyezik a tulajdonságot megvalósító metódusok öröklésével. A tükröződés a tulajdonságokat név és aláírás elrejtéseként kezeli. Lásd az alábbi 2. megjegyzést. |
| Módszer | No | Yes. A metódusok (mind a virtuális, mind a nem virtuális) elrejthetők név szerint vagy elrejthetők név és aláírás alapján. |
| Beágyazott típus | No | No |
| Ingatlan | Nem alkalmazható | A gyakori típusrendszerszabály az, hogy az öröklés megegyezik a tulajdonságot megvalósító metódusok öröklésével. A tükröződés a tulajdonságokat név és aláírás elrejtéseként kezeli. Lásd az alábbi 2. megjegyzést. |
A név és aláírás szerinti elrejtés az aláírás összes részét figyelembe veszi, beleértve az egyéni módosítókat, a visszatérési típusokat, a paramétertípusokat, a sentineleket és a nem kezelt hívási konvenciókat. Ez egy bináris összehasonlítás.
A reflexió során a tulajdonságok és események név és szignatúra szerint vannak elrejtve. Ha az alaposztálynak van egy beolvasási és egy beállítási kiegészítővel rendelkező tulajdonsága, de a származtatott osztálynak csak beolvasási kiegészítője van, a származtatott osztály tulajdonsága elrejti az alaposztály tulajdonságát, és nem tudja majd elérni a beállítót az alaposztályban.
Az egyéni attribútumok nem részei a gyakori típusrendszernek.
A rendszer csak akkor keres tömböket vagy COM-típusokat, ha már betöltötte őket az elérhető osztályok táblájába.
typeName lehet a névtér által minősített típusnév, vagy egy szerelvény által minősített név, amely tartalmazza a szerelvénynév specifikációját. Lásd a(z) AssemblyQualifiedName.
Ha typeName a névteret tartalmazza, de a szerelvény nevét nem, ez a metódus csak a hívó objektum szerelvényében keres, és ebben a sorrendben mscorlib.dll/System.Private.CoreLib.dll. Ha a typeName teljes mértékben a részleges vagy teljes szerelvénynévvel van minősítve, ez a metódus a megadott szerelvényben keres. Ha a szerelvénynek erős neve van, teljes szerelvénynévre van szükség.
A AssemblyQualifiedName tulajdonság egy teljesen minősített típusnevet ad vissza, beleértve a beágyazott típusokat, a szerelvény nevét és a típusargumentumokat. A közös nyelvi futtatókörnyezetet támogató összes fordító kibocsátja a beágyazott osztály egyszerű nevét, a tükröződés pedig a lekérdezéskor a következő konvencióknak megfelelően strukturált nevet hoz létre.
Note
A processzorarchitektúra a szerelvényidentitás része, és szerelvénynév-sztringek részeként adható meg. Például: "ProcessorArchitecture=msil". Kompatibilitási okokból azonban nem szerepel a AssemblyQualifiedName tulajdonság által visszaadott sztringben. A típusokat úgy is betöltheti, hogy létrehoz egy AssemblyName objektumot, és átadja azt a Load metódus megfelelő túlterhelésének. Ezután a metódus használatával betöltheti a Assembly.GetType típusokat a szerelvényből. Lásd még: AssemblyName.ProcessorArchitecture.
| Határoló | Értelmezés |
|---|---|
| Fordított perjel (\) | Escape karakter. |
| Backtick (') | Egy vagy több számjegyet előz meg, amely egy általános típus nevének végén található típusparaméterek számát jelöli. |
| Szögletes zárójelek ([]) | Általános típusú argumentumlistát csatol egy létrehozott általános típushoz; egy típusargumentumlistán belül csatoljon egy szerelvény által minősített típust. |
| Vessző (,) | Megelőzi a szerelvény nevét. |
| Időszak (.) | Névtérazonosítókat jelöl. |
| Pluszjel (+) | Beágyazott osztályt előz meg. |
Egy osztály teljes neve például így nézhet ki:
TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly
Ha a névtér TopNamespace.Sub+Namespace, akkor a sztringnek a pluszjel (+) elé kell lépnie egy escape karakterrel (\), hogy ne lehessen beágyazott elválasztóként értelmezni. A tükröződés a következőképpen bocsátja ki ezt a sztringet:
TopNamespace.Sub\+Namespace.ContainingClass+NestedClass,MyAssembly
A "++" "\+\+" lesz, a "\" pedig "\\\" lesz.
Ez a minősített név megőrizhető, és később használható a Type. A kereséshez és a betöltéshez Typehasználja GetType csak a típusnevet, vagy a szerelvény minősített típusnevét. GetType a típusnévvel csak a Type hívó szerelvényében, majd a Rendszerszerelvényben fogja keresni. GetType A szerelvény minősített típusnevével bármelyik szerelvényben megkeresi a Type szerelvényt.
A típusnevek tartalmazhatnak olyan záró karaktereket, amelyek a típussal kapcsolatos további információkat jelölnek, például azt, hogy a típus hivatkozástípus, mutatótípus vagy tömbtípus-e. Ha a típusnevet a záró karakterek nélkül szeretné lekérni, használja t.GetElementType().ToString()a következőt: hol t található a típus.
A szóközök a szerelvény neve kivételével minden típusnév-összetevőben relevánsak. A szerelvény nevében a "," elválasztó előtti szóközök relevánsak, de a "," elválasztó utáni szóközök figyelmen kívül lesznek hagyva.
Az általános típus neve egy háttérrel (') végződik, amelyet az általános típusú argumentumok számát jelző számjegyek követnek. Ennek a névkezelésnek az a célja, hogy lehetővé tegye a fordítók számára, hogy azonos nevű, de különböző számú típusparaméterrel rendelkező általános típusokat támogassanak, amelyek ugyanabban a hatókörben fordulnak elő. A tükröződés például a Tuple`1 és a Tuple`2 nevet adja vissza az általános Tuple(Of T) és Tuple(Of T0, T1) Visual Basic, vagy Tuple<T> és Tuple<T0, T1> a Visual C#-ban.
Általános típusok esetén a típusargumentumok listája szögletes zárójelek közé kerül, a típusargumentumokat pedig vesszők választják el egymástól. Egy általános Dictionary<TKey,TValue> típusparaméter például két típusparaméterrel rendelkezik. A Dictionary<TKey,TValue> típuskulcsok MyType közül String a következők jelölhetők:
System.Collections.Generic.Dictionary`2[System.String,MyType]
Ha egy szerelvény-minősített típust szeretne megadni egy típusargumentumlistában, a szerelvény által minősített típust zárójelek közé kell foglalnia. Ellenkező esetben a szerelvény által minősített név részeit elválasztó vesszőket a rendszer további típusargumentumok elválasztójaként értelmezi. Például egy Dictionary<TKey,TValue>MyType MyAssembly.dlltípusú kulcsokat Stringtartalmazó MyAssembly.dllaz alábbiak szerint adható meg:
Type.GetType("System.Collections.Generic.Dictionary`2[System.String,[MyType,MyAssembly]]")
Note
A szerelvény-minősített típus csak akkor zárható szögletes zárójelbe, ha egy típusparaméter-listában jelenik meg. A típusparaméter-listákban a szerelvényekben a minősített és a nem minősített típusok keresésére vonatkozó szabályok megegyeznek a minősített és a nem minősített nemgenerikus típusok szabályaival.
A null értékű típusok az általános típusok speciális esetei. A null értékű értékeket Int32 például a "System.Nullable'1[System.Int32]" sztring jelöli.
Note
A null értékű típusokat típusoperátorok használatával is lekérheti. A null értékű Boolean típust például a C# typeof(Nullable<bool>) és GetType(Nullable(Of Boolean)) adja vissza Visual Basic.
Az alábbi táblázat a különböző típusokhoz GetType használt szintaxist mutatja be.
| A lekéréshez | Használd |
|---|---|
| Null értékű Int32 | Type.GetType("System.Nullable`1[System.Int32]") |
Nem felügyelt mutató a MyType |
Type.GetType("MyType*") |
Nem felügyelt mutató egy mutatóra MyType |
Type.GetType("MyType**") |
Felügyelt mutató vagy hivatkozás MyType |
Type.GetType("MyType&"). Vegye figyelembe, hogy a mutatókkal ellentétben a hivatkozások egy szintre korlátozódnak. |
| Szülőosztály és beágyazott osztály | Type.GetType("MyParentClass+MyNestedClass") |
| Egydimenziós tömb 0 alsó határával | Type.GetType("MyArray[]") |
| Ismeretlen alsó határral rendelkező egydimenziós tömb | Type.GetType("MyArray[*]") |
| N dimenziós tömb | A zárójeleken belüli vessző (,) összesen n-1 alkalommal. Például System.Object[,,] egy háromdimenziós Object tömböt jelöl. |
| Kétdimenziós tömb tömbje | Type.GetType("MyArray[][]") |
| Négyszögletes kétdimenziós tömb ismeretlen alsó határokkal | Type.GetType("MyArray[,]") |
| Egy általános típus egy típusargumentummal | Type.GetType("MyGenericType`1[MyType]") |
| Általános típus két típusargumentummal | Type.GetType("MyGenericType`2[MyType,AnotherType]") |
| Általános típus két szerelvény-minősített típusargumentummal | Type.GetType("MyGenericType`2[[MyType,MyAssembly],[AnotherType,AnotherAssembly]]") |
| Szerelvény-minősített általános típus szerelvény-minősített típusargumentummal | Type.GetType("MyGenericType`1[[MyType,MyAssembly]],MyGenericTypeAssembly") |
| Olyan általános típus, amelynek típusargumentuma egy általános típus, két típusargumentummal | Type.GetType("MyGenericType`1[AnotherGenericType`2[MyType,AnotherType]]") |
Lásd még
- String
- TypeLoadException
- AssemblyQualifiedName
- GetAssembly(Type)
- GetType(String)
- AssemblyName
- Teljes típusnevek megadása
A következőre érvényes:
GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>)
- Forrás:
- Type.CoreCLR.cs
- Forrás:
- Type.CoreCLR.cs
- Forrás:
- Type.CoreCLR.cs
- Forrás:
- Type.CoreCLR.cs
- Forrás:
- Type.CoreCLR.cs
Lekéri a típust a megadott névvel, opcionálisan egyéni metódusokkal oldja fel a szerelvényt és a típust.
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
Paraméterek
- typeName
- String
A lekérni kívánt típus neve. Ha a typeResolver paraméter meg van adva, a típusnév bármely olyan sztring lehet, amely typeResolver képes feloldani. Ha a assemblyResolver paraméter meg van adva, vagy szabványos típusfeloldást használ, typeName szerelvény-minősített névnek kell lennie (lásd AssemblyQualifiedName), kivéve, ha a típus a jelenleg végrehajtó szerelvényben vagy mscorlib.dll/System.Private.CoreLib.dllvan, ebben az esetben elegendő megadni a névtér által minősített típusnevet.
- assemblyResolver
- Func<AssemblyName,Assembly>
Egy metódus, amely megkeresi és visszaadja a megadott szerelvényt typeName. A szerelvény neve objektumként lesz átadva assemblyResolverAssemblyName . Ha typeName nem tartalmazza a szerelvény nevét, assemblyResolver a függvény nem hívja meg. Ha assemblyResolver nincs megadva, a rendszer szabványos szerelvényfelbontást hajt végre.
Figyelem: Ne adjon át metódusokat ismeretlen vagy nem megbízható hívóktól. Ha így tesz, az a rosszindulatú kód jogosultságának emelkedését eredményezheti. Csak az Ön által megadott vagy már ismert metódusokat használja.
Egy metódus, amely megkeresi és visszaadja a szerelvény által typeName megadott típust, amelyet assemblyResolver a standard szerelvényfelbontás vagy a standard szerelvényfeloldás ad vissza. Ha nincs megadva szerelvény, a typeResolver metódus megadhat egyet. A metódus egy paramétert is használ, amely meghatározza, hogy a kis- és nagybetűket nem érzékelyítő keresés hajtja-e végre; false paraméternek lesz átadva.
Figyelem: Ne adjon át metódusokat ismeretlen vagy nem megbízható hívóktól.
Válaszok
A megadott névvel rendelkező típus, vagy null ha a típus nem található.
- Attribútumok
Kivételek
typeName az null.
A rendszer meghív egy osztály inicializálót, és kivételt jelez.
Hiba akkor fordul elő, ha typeName egy típusnév és egy szerelvénynév lesz elemezve (például ha az egyszerű típusnév tartalmaz egy nem kibontott speciális karaktert).
-vagy-
typeName olyan általános típust jelöl, amely mutatótípussal, ByRef típussal vagy Void annak egyik típusargumentumaként rendelkezik.
-vagy-
typeName olyan általános típust jelöl, amely helytelen számú típusargumentummal rendelkezik.
-vagy-
typeName egy általános típust jelöl, és az egyik típusargumentum nem felel meg a megfelelő típusparaméter korlátainak.
typeNameérvénytelen típust jelöl, például egy tömböt.TypedReference
A szerelvény vagy annak egyik függősége megtalálható, de nem tölthető be.
-vagy-
typeName érvénytelen szerelvénynevet tartalmaz.
-vagy-
typeName egy érvényes szerelvénynév típusnév nélkül.
A szerelvény vagy annak egyik függősége nem érvényes az aktuálisan betöltött futtatókörnyezetre.
Megjegyzések
A metódus használati forgatókönyvei és a assemblyResolver paraméterek részletei typeResolver megtalálhatók a metódus túlterhelésében GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) .
Note
Ha typeName nem található, a metódus hívása GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>)nullad vissza. Nem ad kivételt. Annak szabályozásához, hogy a rendszer kivételt jelez-e, hívja meg a GetType paraméterrel throwOnError rendelkező metódus túlterhelését.
A metódus túlterhelésének meghívása ugyanaz, mint a metódus túlterhelésének GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) meghívása, valamint a paraméterek és false a throwOnError paraméterek megadásaignoreCase.
A következőre érvényes:
GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean)
- Forrás:
- Type.CoreCLR.cs
- Forrás:
- Type.CoreCLR.cs
- Forrás:
- Type.CoreCLR.cs
- Forrás:
- Type.CoreCLR.cs
- Forrás:
- Type.CoreCLR.cs
Lekéri a típust a megadott névvel, megadva, hogy a típus nem található-e kivételt, és opcionálisan egyéni metódusokat biztosít a szerelvény és a típus feloldásához.
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
Paraméterek
- typeName
- String
A lekérni kívánt típus neve. Ha a typeResolver paraméter meg van adva, a típusnév bármely olyan sztring lehet, amely typeResolver képes feloldani. Ha a assemblyResolver paraméter meg van adva, vagy szabványos típusfeloldást használ, typeName szerelvény-minősített névnek kell lennie (lásd AssemblyQualifiedName), kivéve, ha a típus a jelenleg végrehajtó szerelvényben vagy mscorlib.dll/System.Private.CoreLib.dllvan, ebben az esetben elegendő megadni a névtér által minősített típusnevet.
- assemblyResolver
- Func<AssemblyName,Assembly>
Egy metódus, amely megkeresi és visszaadja a megadott szerelvényt typeName. A szerelvény neve objektumként lesz átadva assemblyResolverAssemblyName . Ha typeName nem tartalmazza a szerelvény nevét, assemblyResolver a függvény nem hívja meg. Ha assemblyResolver nincs megadva, a rendszer szabványos szerelvényfelbontást hajt végre.
Figyelem: Ne adjon át metódusokat ismeretlen vagy nem megbízható hívóktól. Ha így tesz, az a rosszindulatú kód jogosultságának emelkedését eredményezheti. Csak az Ön által megadott vagy már ismert metódusokat használja.
Egy metódus, amely megkeresi és visszaadja a szerelvény által typeName megadott típust, amelyet assemblyResolver a standard szerelvényfelbontás vagy a standard szerelvényfeloldás ad vissza. Ha nincs megadva szerelvény, a metódus megadhat egyet. A metódus egy paramétert is használ, amely meghatározza, hogy a kis- és nagybetűket nem érzékelyítő keresés hajtja-e végre; false paraméternek lesz átadva.
Figyelem: Ne adjon át metódusokat ismeretlen vagy nem megbízható hívóktól.
- throwOnError
- Boolean
true kivétel kiírása, ha a típus nem található; false visszatéréshez null. A beállítás false néhány egyéb kivételfeltételt is letilt, de nem mindegyiket. Lásd a Kivételek szakaszt.
Válaszok
A megadott névvel rendelkező típus. Ha a típus nem található, a throwOnError paraméter megadja, hogy a rendszer visszaadja-e null a hibát, vagy kivételt jelez. Bizonyos esetekben a rendszer kivételt vet ki, függetlenül az értéktől throwOnError. Lásd a Kivételek szakaszt.
- Attribútumok
Kivételek
typeName az null.
A rendszer meghív egy osztály inicializálót, és kivételt jelez.
throwOnError és true a típus nem található.
-vagy-
throwOnError
true érvénytelen typeName karaktereket tartalmaz, például beágyazott lapot.
-vagy-
throwOnError
true üres typeName sztring.
-vagy-
throwOnError
true érvénytelen typeName méretű tömbtípust jelöl.
-vagy-
typeNameegy tömböt jelöl.TypedReference
Hiba akkor fordul elő, ha typeName egy típusnév és egy szerelvénynév lesz elemezve (például ha az egyszerű típusnév tartalmaz egy nem kibontott speciális karaktert).
-vagy-
throwOnError
true érvénytelen typeName szintaxist tartalmaz (például "MyType[,*;]").
-vagy-
typeName olyan általános típust jelöl, amely mutatótípussal, ByRef típussal vagy Void annak egyik típusargumentumaként rendelkezik.
-vagy-
typeName olyan általános típust jelöl, amely helytelen számú típusargumentummal rendelkezik.
-vagy-
typeName egy általános típust jelöl, és az egyik típusargumentum nem felel meg a megfelelő típusparaméter korlátainak.
throwOnError van, true és a szerelvény vagy annak egyik függősége nem található.
-vagy-
typeName érvénytelen szerelvénynevet tartalmaz.
-vagy-
typeName egy érvényes szerelvénynév típusnév nélkül.
A szerelvény vagy annak egyik függősége megtalálható, de nem tölthető be.
A szerelvény vagy annak egyik függősége nem érvényes az aktuálisan betöltött futtatókörnyezetre.
Megjegyzések
A metódus használati forgatókönyvei és a assemblyResolver paraméterek részletei typeResolver megtalálhatók a metódus túlterhelésében GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) .
A metódus túlterhelésének meghívása ugyanaz, mint a metódus túlterhelésének GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) meghívása és a false paraméter megadásaignoreCase.
A következőre érvényes:
GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean)
- Forrás:
- Type.CoreCLR.cs
- Forrás:
- Type.CoreCLR.cs
- Forrás:
- Type.CoreCLR.cs
- Forrás:
- Type.CoreCLR.cs
- Forrás:
- Type.CoreCLR.cs
Lekéri a típust a megadott névvel, megadva, hogy kis- és nagybetűkre érzékeny keresést hajtson-e végre, és kivételt adjon-e, ha a típus nem található, és opcionálisan egyéni metódusokat is megadhat a szerelvény és a típus feloldásához.
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
Paraméterek
- typeName
- String
A lekérni kívánt típus neve. Ha a typeResolver paraméter meg van adva, a típusnév bármely olyan sztring lehet, amely typeResolver képes feloldani. Ha a assemblyResolver paraméter meg van adva, vagy szabványos típusfeloldást használ, typeName szerelvény-minősített névnek kell lennie (lásd AssemblyQualifiedName), kivéve, ha a típus a jelenleg végrehajtó szerelvényben vagy mscorlib.dll/System.Private.CoreLib.dllvan, ebben az esetben elegendő megadni a névtér által minősített típusnevet.
- assemblyResolver
- Func<AssemblyName,Assembly>
Egy metódus, amely megkeresi és visszaadja a megadott szerelvényt typeName. A szerelvény neve objektumként lesz átadva assemblyResolverAssemblyName . Ha typeName nem tartalmazza a szerelvény nevét, assemblyResolver a függvény nem hívja meg. Ha assemblyResolver nincs megadva, a rendszer szabványos szerelvényfelbontást hajt végre.
Figyelem: Ne adjon át metódusokat ismeretlen vagy nem megbízható hívóktól. Ha így tesz, az a rosszindulatú kód jogosultságának emelkedését eredményezheti. Csak az Ön által megadott vagy már ismert metódusokat használja.
Egy metódus, amely megkeresi és visszaadja a szerelvény által typeName megadott típust, amelyet assemblyResolver a standard szerelvényfelbontás vagy a standard szerelvényfeloldás ad vissza. Ha nincs megadva szerelvény, a metódus megadhat egyet. A metódus egy paramétert is használ, amely meghatározza, hogy a kis- és nagybetűket nem érzékelyítő keresés hajtja-e végre; a paraméter értéke ignoreCase az adott paraméternek lesz átadva.
Figyelem: Ne adjon át metódusokat ismeretlen vagy nem megbízható hívóktól.
- throwOnError
- Boolean
true kivétel kiírása, ha a típus nem található; false visszatéréshez null. A beállítás false néhány egyéb kivételfeltételt is letilt, de nem mindegyiket. Lásd a Kivételek szakaszt.
- ignoreCase
- Boolean
truea kis- és nagybetűk megkülönböztetésére szolgáló keresés typeNamefalse végrehajtásához a kis- és nagybetűket megkülönböztető keresés végrehajtásáhoztypeName.
Válaszok
A megadott névvel rendelkező típus. Ha a típus nem található, a throwOnError paraméter megadja, hogy a rendszer visszaadja-e null a hibát, vagy kivételt jelez. Bizonyos esetekben a rendszer kivételt vet ki, függetlenül az értéktől throwOnError. Lásd a Kivételek szakaszt.
- Attribútumok
Kivételek
typeName az null.
A rendszer meghív egy osztály inicializálót, és kivételt jelez.
throwOnError és true a típus nem található.
-vagy-
throwOnError
true érvénytelen typeName karaktereket tartalmaz, például beágyazott lapot.
-vagy-
throwOnError
true üres typeName sztring.
-vagy-
throwOnError
true érvénytelen typeName méretű tömbtípust jelöl.
-vagy-
typeNameegy tömböt jelöl.TypedReference
Hiba akkor fordul elő, ha typeName egy típusnév és egy szerelvénynév lesz elemezve (például ha az egyszerű típusnév tartalmaz egy nem kibontott speciális karaktert).
-vagy-
throwOnError
true érvénytelen typeName szintaxist tartalmaz (például "MyType[,*;]").
-vagy-
typeName olyan általános típust jelöl, amely mutatótípussal, ByRef típussal vagy Void annak egyik típusargumentumaként rendelkezik.
-vagy-
typeName olyan általános típust jelöl, amely helytelen számú típusargumentummal rendelkezik.
-vagy-
typeName egy általános típust jelöl, és az egyik típusargumentum nem felel meg a megfelelő típusparaméter korlátainak.
throwOnError van, true és a szerelvény vagy annak egyik függősége nem található.
A szerelvény vagy annak egyik függősége megtalálható, de nem tölthető be.
-vagy-
typeName érvénytelen szerelvénynevet tartalmaz.
-vagy-
typeName egy érvényes szerelvénynév típusnév nélkül.
A szerelvény vagy annak egyik függősége nem érvényes szerelvény az aktuálisan betöltött futtatókörnyezethez.
Megjegyzések
.NET Core 3.0-s és újabb verzióiban, ha assemblyResolver null, akkor az API által aktivált szerelvénybetöltéseket a AssemblyLoadContext.CurrentContextualReflectionContext aktuális értéke befolyásolja.
Használja a GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) metódus túlterhelését és a hozzá tartozó túlterheléseket (GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>) és GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean)) a GetType módszer alapértelmezett implementációjának rugalmasabb implementációkra való lecseréléséhez. A típusneveket és az azokat tartalmazó szerelvények nevét feloldó saját metódusok megadásával a következőket teheti:
- Szabályozza, hogy egy típust egy összeállítás melyik verziójából töltsön be.
- Adjon meg egy másik helyet egy olyan típusnév kereséséhez, amely nem tartalmaz szerelvénynevet.
- Szerelvények betöltése részleges szerelvénynevek használatával.
- Olyan alosztályokat System.Type ad vissza, amelyeket nem a közös nyelvi futtatókörnyezet (CLR) hoz létre.
A verziótűrő szerializációban például ez a módszer lehetővé teszi, hogy részleges névvel keressen egy "legjobban illeszkedő" szerelvényt. A metódus egyéb túlterheléseihez GetType szerelvény-minősített típusnévre van szükség, amely tartalmazza a verziószámot.
Előfordulhat, hogy a típusrendszer alternatív implementációinak vissza kell adniuk olyan alosztályokat a System.Type, amelyeket nem a CLR hozott létre; a GetType metódus egyéb túlterhelései által visszaadott összes típus futásidejű típus.
Használati megjegyzések
Ennek a metódusnak a túlterhelés, illetve az ezekhez tartozó túlterhelések typeName egy típus és egy szerelvény nevekké való elemzésével, majd a nevek feloldásával oldják meg a feladatot. A szerelvény nevének feloldása a típusnév feloldása előtt történik, mivel egy típusnevet egy szerelvény kontextusában kell feloldani.
Note
Ha nem ismeri az assembly által minősített típusnevek fogalmát, olvassa el a következő részt: AssemblyQualifiedName.
Ha a typeName nem egy szerelvénykompatibilis név, a szerelvény feloldása elmarad. A nem minősített típusnevek feloldhatók a mscorlib.dll/System.Private.CoreLib.dll vagy az éppen futó szerelvény kontextusában, vagy megadhat egy szerelvényt a typeResolver paraméterben. A szerelvény nevének különböző típusú névfeloldáshoz való beleadásának vagy kihagyásának hatásai táblázatként jelennek meg a Vegyes névfeloldás szakaszban.
Általános használati megjegyzések:
Ne adja át a metódusokat a
assemblyResolvervagy atypeResolver-nek, ha azok ismeretlen vagy nem megbízható hívóktól származnak. Csak az Ön által megadott vagy már ismert metódusokat használja.Caution
Ha ismeretlen vagy nem megbízható hívóktól származó metódusokat használ, az a rosszindulatú kódok jogosultságának emelkedését eredményezheti.
Ha kihagyja a
assemblyResolverés/vagy atypeResolverparamétereket, athrowOnErrorparaméter értéke az alapértelmezett felbontást végrehajtó metódusoknak lesz átadva.Ha
throwOnErrortrue, ez a metódus TypeLoadException-t dob, amikortypeResolvernullértéket ad vissza, és FileNotFoundException-t, amikorassemblyResolvernullértéket ad vissza.Ez a módszer nem észleli az
assemblyResolveréstypeResolveráltal dobott kivételeket. Ön a felelős minden olyan kivételért, amelyet a feloldó metódusok okoznak.
Szerelvények feloldása
A assemblyResolver metódus kap egy AssemblyName objektumot, amely a sztringszerelvény nevének typeNameelemzésével jön létre. Ha a typeName nem tartalmaz egy névjegyzéket, akkor a assemblyResolver nem hívódik meg, és a null átadódik a typeResolver-nak.
Ha assemblyResolver nincs megadva, a rendszer szabványos szerelvény-próbat használ a szerelvény megkereséséhez. Ha assemblyResolver meg van adva, a GetType metódus nem végez szokásos vizsgálatot; ebben az esetben gondoskodnia kell arról, hogy a assemblyResolver kezelni tudja a kapott szerelvényeket.
A assemblyResolver metódusnak vissza kell térnie null , ha a szerelvény nem oldható fel. Ha assemblyResolver visszaadja null, akkor typeResolver nem kerül meghívásra, és nem történik további feldolgozás; továbbá, ha throwOnErrortrue, akkor egy FileNotFoundException kivétel kerül dobásra.
Ha az AssemblyName átadott assemblyResolver név egy részleges név, akkor annak egy vagy több része a következő null. Ha például nem rendelkezik verzióval, akkor a tulajdonság .Versionnull Ha a Version tulajdonság, a CultureInfo tulajdonság és a GetPublicKeyToken metódus mind visszaadja null, akkor csak a szerelvény egyszerű neve lett megadva. A assemblyResolver metódus a szerelvény nevének minden részét használhatja vagy figyelmen kívül hagyhatja.
A különböző összeállítási feloldási lehetőségek hatásait táblázatként mutatja be a Vegyes névfeloldás szakasz, egyszerű és összeállítással minősített típusnevek esetében.
Típusok feloldása
Ha typeName nem ad meg szerelvénynevet, typeResolver a program mindig meghívja. Ha typeName szerelvénynevet ad meg, a rendszer csak akkor hívja meg, typeResolver ha a szerelvény neve sikeresen feloldva van. Ha assemblyResolver vagy az összeszerelési vizsgálat eredményül ad null, akkor typeResolver nem kerül meghívásra.
A typeResolver metódus három argumentumot kap:
- A keresendő szerelvény, vagy
nullhatypeNamenem tartalmaz szerelvénynevet. - A típus egyszerű neve. Beágyazott típus esetén ez a legkülső tartalmú típus. Általános típus esetén ez az általános típus egyszerű neve.
- Logikai érték, amely akkor jelenik
truemeg, ha a típusnevek esetét figyelmen kívül kell hagyni.
A megvalósítás határozza meg az argumentumok használatát. A typeResolver metódusnak vissza kell térnie null , ha nem tudja feloldani a típust. Ha typeResolver visszatér, és null így vanthrowOnError, ez a true túlterhelés egy GetTypeTypeLoadException .
A különböző típusfeloldási lehetőségek hatása táblázatként jelenik meg a Vegyes névfeloldás szakaszban az egyszerű és szerelvény által minősített típusnevek esetében.
Beágyazott típusok feloldása
Ha typeName beágyazott típus, a rendszer csak a legkülső tartalmú típus nevét adja át a rendszernek typeResolver. Ha typeResolver ezt a típust adja vissza, a GetNestedType metódus rekurzívan lesz meghívva, amíg a legbelső beágyazott típus meg nem oldódott.
Általános típusok feloldása
A GetType rendszer rekurzív módon hívja meg az általános típusokat: először magát az általános típust, majd a típusargumentumokat. Ha egy típusargumentum általános, GetType a rendszer rekurzívan hívja meg a típusargumentumok feloldásához, és így tovább.
Ennek a assemblyResolver rekurziónak az összes szintjét képesnek kell lennie feloldani, és typeResolver az ön által megadott kombinációnak is képesnek kell lennie feloldani. Tegyük fel például, hogy megad egy assemblyResolver elemet, amely a MyAssembly betöltését szabályozza. Tegyük fel, hogy meg szeretné oldani az általános típust Dictionary<string, MyType> (Dictionary(Of String, MyType) a Visual Basicben). A következő általános típusnevet adhatja meg:
"System.Collections.Generic.Dictionary`2[System.String,[MyNamespace.MyType, MyAssembly]]"
Figyelje meg, hogy MyType ez az egyetlen szerelvény-minősített típusargumentum. Az Dictionary<TKey,TValue> és String osztályok neve nincs assembly-minősítéssel ellátva. A typeResolver képesnek kell lennie arra, hogy kezeljen egy szerelvényt vagy null, mert null érkezik Dictionary<TKey,TValue> és String számára. Az esetet úgy tudja kezelni, hogy meghívja a GetType metódusnak azt a túlterhelését, amelyik egy stringet vesz át, mert a nem minősített típusnevek mscorlib.dll/System.Private.CoreLib.dll-ban vannak.
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))
A assemblyResolver metódus nem a szótártípushoz és a sztringtípushoz van meghívva, mert ezek a típusnevek nem szerelvény-minősítéssel rendelkeznek.
Tegyük fel, hogy ahelyettSystem.String, hogy az első általános argumentumtípus a következőtől származikYourTypeYourAssembly:
"System.Collections.Generic.Dictionary`2[[YourNamespace.YourType, YourAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null], [MyNamespace.MyType, MyAssembly]]"
Mivel ez a szerelvény nem mscorlib.dll/System.Private.CoreLib.dll, és nem is a jelenleg végrehajtó szerelvény, nem oldható fel YourType szerelvény-minősített név nélkül. Mivel a assemblyResolve rekurzívan lesz meghívva, képesnek kell lennie kezelni ezt az esetet. Ahelyett, hogy a null-től eltérő szerelvényekre MyAssembly térne vissza, most az adott AssemblyName objektummal hajt végre szerelvényterhelést.
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)
Speciális karakterekkel rendelkező típusnevek feloldása
Egyes karakterek különleges jelentéssel rendelkeznek az összeállítás által kvalifikált nevekben. Ha egy egyszerű típusnév tartalmazza ezeket a karaktereket, a karakterek elemzési hibákat okoznak, ha az egyszerű név egy assemblészerinti név része. Az elemzési hibák elkerülése érdekében ki kell vonnia a speciális karaktereket egy fordított perjellel, mielőtt az összeállítással minősített nevet átadná a GetType metódusnak. Ha például egy típus neve el van nevezve Strange]Type, a feloldó karaktert a szögletes zárójel elé kell adni az alábbiak szerint: Strange\]Type.
Note
Az ilyen speciális karaktereket tartalmazó nevek nem hozhatók létre a Visual Basicben vagy a C#-ban, de közös köztes nyelv (CIL) használatával vagy dinamikus szerelvények kibocsátásával hozhatók létre.
Az alábbi táblázat a típusnevek speciális karaktereit mutatja be.
| Karakter | Értelmezés |
|---|---|
, (vessző) |
Összeállítás által véglegesített nevek elválasztója. |
[] (szögletes zárójelek) |
Utótagpárként egy tömbtípust jelez; határolópárként általános argumentumlistákat és szerelvényhez rendelt neveket foglal magában. |
& (és-jel) |
Utótagként azt jelzi, hogy egy típus referenciatípus. |
* (csillagjel) |
Utótagként azt jelzi, hogy egy típus mutatótípus. |
+ (plusz) |
Elválasztó a beágyazott típusok számára. |
\ (fordított perjel) |
Escape karakter. |
Az olyan tulajdonságok, mint a AssemblyQualifiedName, helyesen kódolt sztringeket adnak vissza. Megfelelően kódolt karakterláncokat kell átadnia a GetType metódusnak. Viszont a metódus helyesen kimenekített neveket ad át a GetType és az alapértelmezett típusfeloldási metódusoknak typeResolver. Ha össze kell hasonlítania egy nevet egy nem escape-elt névvel a typeResolver-ben, el kell távolítania az escape karaktereket.
Vegyes névfeloldás
Az alábbi táblázat összefoglalja a assemblyResolver, typeResolver és az alapértelmezett névfeloldás interakcióit a typeName összes típusnév és szerelvénynév kombinációjára.
| Típusnév tartalma | Szerelvénymegoldó módszer | Típusfeloldó metódus | Result |
|---|---|---|---|
| típus, szerelvény | null | null | Egyenértékű a Type.GetType(String, Boolean, Boolean) metódus túlterhelése meghívásával. |
| típus, szerelvény | biztosítva | null |
assemblyResolver visszaadja a szerelvényt, vagy null-t ad vissza, ha nem tudja felismerni a szerelvényt. Ha az összeállítást feloldották, a rendszer a Assembly.GetType(String, Boolean, Boolean) metódust túlterheléssel használja a típus összeállításból történő betöltéséhez, ellenkező esetben nem próbálkozik a típus feloldásával. |
| típus, szerelvény | null | biztosítva | Egyenértékű a szerelvény nevének AssemblyName objektummá alakításával és a szerelvény lekéréséhez szükséges metódustúlterhelés Assembly.Load(AssemblyName) meghívásával. Ha a szerelvény feloldódik, akkor átkerül typeResolver-hoz; ellenkező esetben typeResolver nem kerül meghívásra, és nincs további kísérlet a típus feloldására. |
| típus, szerelvény | biztosítva | biztosítva |
assemblyResolver visszaadja a szerelvényt, vagy null-t ad vissza, ha nem tudja felismerni a szerelvényt. Ha a szerelvény feloldódik, akkor átkerül typeResolver-hoz; ellenkező esetben typeResolver nem kerül meghívásra, és nincs további kísérlet a típus feloldására. |
| típus | null, megadva | null | Egyenértékű a Type.GetType(String, Boolean, Boolean) metódus túlterhelése meghívásával. Mivel a szerelvény neve nincs megadva, a rendszer csak mscorlib.dll/System.Private.CoreLib.dll és az éppen futó szerelvényt keresi. Ha assemblyResolver meg van adva, a rendszer figyelmen kívül hagyja. |
| típus | null, megadva | biztosítva |
typeResolver meghívásra kerül, és null átadásra kerül a szerelvénynek.
typeResolver bármilyen összeállításból megadhat egy típust, beleértve azokat az összeállításokat is, amelyeket erre a célra tölt be. Ha assemblyResolver meg van adva, a rendszer figyelmen kívül hagyja. |
| kódösszeállítás | null, megadva | null, megadva | Az A FileLoadException parancs azért van dobva, mert a szerelvény neve úgy van elemezve, mintha egy szerelvény által minősített típusnév lenne. Ez érvénytelen szerelvénynevet eredményez. |