Type.GetType Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Ottiene un oggetto Type che rappresenta il tipo specificato.
Overload
GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) |
Ottiene il tipo con il nome specificato, indicando se eseguire una ricerca facendo distinzione tra maiuscole e minuscole e se generare un'eccezione se il tipo non viene trovato e fornendo facoltativamente metodi personalizzati per risolvere l'assembly e il tipo. |
GetType() |
Ottiene l'oggetto Type corrente. |
GetType(String) |
Ottiene l'oggetto Type con il nome specificato, eseguendo una ricerca con distinzione tra maiuscole e minuscole. |
GetType(String, Boolean) |
Ottiene l'oggetto Type con il nome specificato, eseguendo una ricerca con distinzione tra maiuscole e minuscole e specificando se generare un'eccezione in caso il tipo non venga trovato. |
GetType(String, Boolean, Boolean) |
Ottiene l'oggetto Type con il nome specificato, che indica se generare un'eccezione quando viene trovato il tipo e se eseguire una ricerca con distinzione tra maiuscole e minuscole. |
GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>) |
Ottiene il tipo con il nome specificato, fornendo facoltativamente metodi personalizzati per risolvere l'assembly e il tipo. |
GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean) |
Ottiene il tipo con il nome specificato, indicando se generare un'eccezione se il tipo non viene trovato e fornendo facoltativamente metodi personalizzati per risolvere l'assembly e il tipo. |
GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean)
- Origine:
- Type.CoreCLR.cs
- Origine:
- Type.CoreCLR.cs
- Origine:
- Type.CoreCLR.cs
Ottiene il tipo con il nome specificato, indicando se eseguire una ricerca facendo distinzione tra maiuscole e minuscole e se generare un'eccezione se il tipo non viene trovato e fornendo facoltativamente metodi personalizzati per risolvere l'assembly e il tipo.
public:
static Type ^ GetType(System::String ^ typeName, Func<System::Reflection::AssemblyName ^, System::Reflection::Assembly ^> ^ assemblyResolver, Func<System::Reflection::Assembly ^, System::String ^, bool, Type ^> ^ typeResolver, bool throwOnError, bool ignoreCase);
public static Type? GetType (string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly?>? assemblyResolver, Func<System.Reflection.Assembly?,string,bool,Type?>? typeResolver, bool throwOnError, bool ignoreCase);
public static Type GetType (string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly> assemblyResolver, Func<System.Reflection.Assembly,string,bool,Type> typeResolver, bool throwOnError, bool ignoreCase);
static member GetType : string * Func<System.Reflection.AssemblyName, System.Reflection.Assembly> * Func<System.Reflection.Assembly, string, bool, Type> * bool * bool -> Type
Public Shared Function GetType (typeName As String, assemblyResolver As Func(Of AssemblyName, Assembly), typeResolver As Func(Of Assembly, String, Boolean, Type), throwOnError As Boolean, ignoreCase As Boolean) As Type
Parametri
- typeName
- String
Nome del tipo da ottenere. Se viene fornito il parametro typeResolver
, il nome del tipo può essere qualsiasi stringa che typeResolver
è in grado di risolvere. Se il assemblyResolver
parametro viene fornito o se viene usata la risoluzione dei tipi standard, typeName
deve essere un nome qualificato dall'assembly (vedere AssemblyQualifiedName), a meno che il tipo non si trova nell'assembly attualmente in esecuzione o in mscorlib.dll/System.Private.CoreLib.dll, nel qual caso è sufficiente fornire il nome del tipo qualificato dallo spazio dei nomi.
- assemblyResolver
- Func<AssemblyName,Assembly>
Metodo che individua e restituisce l'assembly specificato in typeName
. Il nome dell'assembly viene passato a assemblyResolver
come oggetto AssemblyName. Se typeName
non contiene il nome di un assembly, assemblyResolver
non viene chiamato. Se assemblyResolver
non viene fornito, viene eseguita la risoluzione dell'assembly standard.
Attenzione: non passare metodi da chiamanti sconosciuti o non attendibili. In caso contrario, potrebbe verificarsi un'elevazione di privilegi per codice dannoso. Usare solo i metodi forniti o con cui si ha dimestichezza.
Metodo che individua e restituisce il tipo specificato da typeName
dall'assembly restituito da assemblyResolver
o dalla risoluzione dell'assembly standard. Se non viene fornito alcun assembly, il metodo può fornirne uno. Il metodo accetta inoltre un parametro che specifica se eseguire una ricerca senza fare distinzione tra maiuscole e minuscole. Il valore di ignoreCase
viene passato al parametro.
Attenzione: non passare metodi da chiamanti sconosciuti o non attendibili.
- throwOnError
- Boolean
true
per generare un'eccezione se non è possibile trovare il tipo; false
per restituire null
. Se si specifica false
vengono eliminate alcune condizioni di eccezione, ma non tutte. Vedere la sezione relativa alle eccezioni.
- ignoreCase
- Boolean
true
per eseguire una ricerca di typeName
senza distinzione tra maiuscole minuscole, false
per eseguire una ricerca di typeName
con distinzione tra maiuscole e minuscole.
Restituisce
Tipo con il nome specificato. Se il tipo non viene trovato, il parametro throwOnError
specifica se viene restituito null
o se viene generata un'eccezione. In alcuni casi, viene generata un'eccezione indipendentemente dal valore di throwOnError
. Vedere la sezione relativa alle eccezioni.
Eccezioni
typeName
è null
.
Viene richiamato un inizializzatore di classi e viene generata un'eccezione.
throwOnError
è true
e il tipo non è stato trovato.
-oppure-
throwOnError
è true
e typeName
contiene caratteri non validi, ad esempio una scheda incorporata.
-oppure-
throwOnError
è true
e typeName
è una stringa vuota.
-oppure-
throwOnError
è true
e typeName
rappresenta un tipo di matrice con una dimensione non valida.
-oppure-
typeName
rappresenta una matrice di TypedReference.
Si verifica un errore quando typeName
viene analizzato in un nome di tipo e un nome di assembly (ad esempio, quando il nome di tipo semplice include un carattere speciale senza escape).
-oppure-
throwOnError
è true
e typeName
contiene sintassi non valida (ad esempio, "MyType[,*,]").
-oppure-
typeName
rappresenta un tipo generico che ha un tipo di puntatore, un tipo ByRef
o Void tra i relativi argomenti di tipo.
-oppure-
typeName
rappresenta un tipo generico che ha un numero errato di argomenti di tipo.
-oppure-
typeName
rappresenta un tipo generico e uno dei relativi argomenti di tipo non soddisfa i vincoli per il parametro di tipo corrispondente.
throwOnError
è true
e l'assembly o una delle sue dipendenze non è stato trovato.
L'assembly o una delle relative dipendenze è stato trovato, ma non può essere caricato.
-oppure-
typeName
contiene un nome di assembly non valido.
-oppure-
typeName
è un nome di assembly valido senza un nome di tipo.
L'assembly o una delle relative dipendenze non è un assembly valido per il runtime attualmente caricato.
Commenti
Per altre informazioni su questa API, vedere Note sulle API supplementari per Type.GetType.
Si applica a
GetType()
- Origine:
- Type.cs
- Origine:
- Type.cs
- Origine:
- Type.cs
Ottiene l'oggetto Type corrente.
public:
Type ^ GetType();
public:
virtual Type ^ GetType();
public Type GetType ();
override this.GetType : unit -> Type
Public Function GetType () As Type
Restituisce
Oggetto Type corrente.
Implementazioni
Eccezioni
Viene richiamato un inizializzatore di classi e viene generata un'eccezione.
Vedi anche
Si applica a
GetType(String)
- Origine:
- Type.CoreCLR.cs
- Origine:
- Type.CoreCLR.cs
- Origine:
- Type.CoreCLR.cs
Ottiene l'oggetto Type con il nome specificato, eseguendo una ricerca con distinzione tra maiuscole e minuscole.
public:
static Type ^ GetType(System::String ^ typeName);
public static Type GetType (string typeName);
public static Type? GetType (string typeName);
static member GetType : string -> Type
Public Shared Function GetType (typeName As String) As Type
Parametri
- typeName
- String
Nome qualificato dall'assembly del tipo da ottenere. Vedere AssemblyQualifiedName. Se il tipo si trova nell'assembly attualmente in esecuzione o in mscorlib.dll/System.Private.CoreLib.dll, è sufficiente specificare il nome del tipo qualificato dal relativo spazio dei nomi.
Restituisce
Tipo con il nome specificato, se presente; in caso contrario, null
.
Eccezioni
typeName
è null
.
Viene richiamato un inizializzatore di classi e viene generata un'eccezione.
typeName
rappresenta un tipo generico che ha un tipo di puntatore, un tipo ByRef
o Void tra i relativi argomenti di tipo.
-oppure-
typeName
rappresenta un tipo generico che ha un numero errato di argomenti di tipo.
-oppure-
typeName
rappresenta un tipo generico e uno dei relativi argomenti di tipo non soddisfa i vincoli per il parametro di tipo corrispondente.
typeName
rappresenta un tipo non valido, ad esempio una matrice di TypedReference.
L'assembly o una delle relative dipendenze è stato trovato, ma non può essere caricato.
Nota: in .NET per le app di Windows Store o nella libreria di classi portabile intercettare invece l'eccezione della classe di base, IOException, .
L'assembly non è valido per il runtime attualmente caricato.
Esempio
Nell'esempio seguente viene recuperato il tipo di System.Int32
e viene utilizzato tale oggetto type per visualizzare la FullName proprietà di System.Int32
.
using namespace System;
int main()
{
try {
// Get the type of a specified class.
Type^ myType1 = Type::GetType( "System.Int32" );
Console::WriteLine( "The full name is {0}.\n", myType1->FullName );
}
catch ( TypeLoadException^ e ) {
Console::WriteLine("{0}: Unable to load type System.Int32",
e->GetType()->Name);
}
try {
// Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
Type^ myType2 = Type::GetType( "NoneSuch", true );
Console::WriteLine( "The full name is {0}.", myType2->FullName );
}
catch ( TypeLoadException^ e ) {
Console::WriteLine("{0}: Unable to load type NoneSuch",
e->GetType()->Name);
}
}
// The example displays the following output:
// The full name is System.Int32.
//
// TypeLoadException: Unable to load type NoneSuch
using System;
class Example
{
public static void Main()
{
try {
// Get the type of a specified class.
Type myType1 = Type.GetType("System.Int32");
Console.WriteLine("The full name is {0}.\n", myType1.FullName);
}
catch (TypeLoadException e)
{
Console.WriteLine("{0}: Unable to load type System.Int32", e.GetType().Name);
}
try {
// Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
Type myType2 = Type.GetType("NoneSuch", true);
Console.WriteLine("The full name is {0}.", myType2.FullName);
}
catch(TypeLoadException e) {
Console.WriteLine("{0}: Unable to load type NoneSuch", e.GetType().Name);
}
}
}
// The example displays the following output:
// The full name is System.Int32.
//
// TypeLoadException: Unable to load type NoneSuch
open System
try
// Get the type of a specified class.
let myType1 = Type.GetType "System.Int32"
printfn $"The full name is {myType1.FullName}.\n"
with :? TypeLoadException as e ->
printfn $"{e.GetType().Name}: Unable to load type System.Int32"
try
// Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
let myType2 = Type.GetType("NoneSuch", true)
printfn $"The full name is {myType2.FullName}."
with :? TypeLoadException as e ->
printfn $"{e.GetType().Name}: Unable to load type NoneSuch"
// The example displays the following output:
// The full name is System.Int32.
//
// TypeLoadException: Unable to load type NoneSuch
Class Example
Public Shared Sub Main()
Try
' Get the type of the specified class.
Dim myType1 As Type = Type.GetType("System.Int32")
Console.WriteLine("The full name is {0}.", myType1.FullName)
Catch e As TypeLoadException
Console.WriteLine("{0}: Unable to load type System.Int32",
e.GetType().Name)
End Try
Console.WriteLine()
Try
' Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
Dim myType2 As Type = Type.GetType("NoneSuch", True)
Console.WriteLine("The full name is {0}.", myType2.FullName)
Catch e As TypeLoadException
Console.WriteLine("{0}: Unable to load type NoneSuch", e.GetType().Name)
End Try
End Sub
End Class
' The example displays the following output:
' The full name is System.Int32.
'
' TypeLoadException: Unable to load type NoneSuch
Commenti
È possibile utilizzare il GetType metodo per ottenere un Type oggetto per un tipo in un altro assembly se si conosce il nome completo dell'assembly, che può essere ottenuto da AssemblyQualifiedName.
GetType causa il caricamento dell'assembly specificato in typeName
. È anche possibile caricare un assembly usando il Assembly.Load metodo e quindi usare il Assembly.GetType metodo o Assembly.GetTypes per ottenere Type oggetti . Se un tipo si trova in un assembly noto al programma in fase di compilazione, è più efficiente usare typeof
in C# o l'operatore GetType
in Visual Basic.
Nota
Se typeName
non è possibile trovare , la chiamata al GetType(String) metodo restituisce null
. Non genera un'eccezione. Per controllare se viene generata un'eccezione, chiamare un overload del GetType metodo con un throwOnError
parametro .
GetType funziona solo sugli assembly caricati dal disco. Se si chiama GetType per cercare un tipo definito in un assembly dinamico definito usando i System.Reflection.Emit servizi, è possibile che si verifichi un comportamento incoerente. Il comportamento dipende dal fatto che l'assembly dinamico sia persistente, ovvero creato usando le RunAndSave
modalità di accesso o Save
dell'enumerazione System.Reflection.Emit.AssemblyBuilderAccess . Se l'assembly dinamico è persistente ed è stato scritto su disco prima GetType
della chiamata, il caricatore trova l'assembly salvato su disco, carica tale assembly e recupera il tipo da tale assembly. Se l'assembly non è stato salvato su disco quando GetType
viene chiamato, il metodo restituisce null
.
GetType
non comprende assembly dinamici temporanei; pertanto, la chiamata GetType
per recuperare un tipo in un assembly dinamico temporaneo restituisce null
.
Per usarlo GetType
in un modulo dinamico, sottoscrivere l'evento e chiamare GetType
prima del AppDomain.AssemblyResolve salvataggio. In caso contrario, si otterranno due copie dell'assembly in memoria.
Nella tabella seguente vengono illustrati i membri di una classe base restituiti dai Get
metodi quando si riflette su un tipo.
Tipo di membro | Static | Non statico |
---|---|---|
Costruttore | No | No |
Campo | No | Sì. Un campo è sempre hide-by-name-and-signature. |
Evento | Non applicabile | La regola di sistema dei tipi comune è che l'ereditarietà è uguale a quella dei metodi che implementano la proprietà. Reflection tratta le proprietà come hide-by-name-and-signature. Vedere la nota 2 seguente. |
Metodo | No | Sì. Un metodo (sia virtuale che non virtuale) può essere hide-by-name o hide-by-name-and-signature. |
Tipo annidato | No | No |
Proprietà | Non applicabile | La regola di sistema dei tipi comune è che l'ereditarietà è uguale a quella dei metodi che implementano la proprietà. Reflection tratta le proprietà come hide-by-name-and-signature. Vedere la nota 2 seguente. |
Hide-by-name-and-signature considera tutte le parti della firma, inclusi modificatori personalizzati, tipi restituiti, tipi di parametri, sentinelle e convenzioni di chiamata non gestite. Si tratta di un confronto binario.
Per la reflection, le proprietà e gli eventi sono nascondi per nome e firma. Se si dispone di una proprietà con una funzione di accesso get e un set nella classe base, ma la classe derivata ha solo una funzione di accesso get, la proprietà classe derivata nasconde la proprietà della classe base e non sarà possibile accedere al setter nella classe base.
Gli attributi personalizzati non fanno parte del sistema di tipi comuni.
Le matrici o i tipi COM non vengono cercati a meno che non siano già stati caricati nella tabella delle classi disponibili.
typeName
può essere il nome del tipo qualificato dallo spazio dei nomi o un nome qualificato per assembly che include una specifica del nome dell'assembly. Vedere AssemblyQualifiedName.
Se typeName
include lo spazio dei nomi ma non il nome dell'assembly, questo metodo cerca solo l'assembly dell'oggetto chiamante e mscorlib.dll/System.Private.CoreLib.dll, in tale ordine. Se typeName è completo con il nome dell'assembly parziale o completo, questo metodo cerca nell'assembly specificato. Se l'assembly ha un nome sicuro, è necessario un nome di assembly completo.
La AssemblyQualifiedName proprietà restituisce un nome di tipo completo, inclusi i tipi annidati, il nome dell'assembly e gli argomenti di tipo generici. Tutti i compilatori che supportano Common Language Runtime generano il nome semplice di una classe annidata e la reflection costruisce un nome mangled quando viene eseguita una query, in conformità alle convenzioni seguenti.
Nota
L'architettura del processore fa parte dell'identità dell'assembly e può essere specificata come parte delle stringhe del nome dell'assembly. Ad esempio, "ProcessorArchitecture=msil". Tuttavia, non è incluso nella stringa restituita dalla AssemblyQualifiedName proprietà, per motivi di compatibilità. È anche possibile caricare i tipi creando un oggetto e passandolo a un AssemblyName overload appropriato del Load metodo. È quindi possibile usare il Assembly.GetType metodo per caricare i tipi dall'assembly. Vedere anche AssemblyName.ProcessorArchitecture.
Delimitatore | Significato |
---|---|
Barra rovesciata (\) | Carattere di escape. |
Backtick (') | Precede una o più cifre che rappresentano il numero di parametri di tipo, che si trovano alla fine del nome di un tipo generico. |
Parentesi quadre ([]) | Racchiudere un elenco di argomenti di tipo generico per un tipo generico costruito; all'interno di un elenco di argomenti di tipo racchiudere un tipo qualificato per l'assembly. |
Virgola (,) | Precede il nome dell'assembly. |
Periodo (.) | Indica gli identificatori dello spazio dei nomi. |
Segno più (+) | Precede una classe annidata. |
Ad esempio, il nome completo per una classe potrebbe essere simile al seguente:
TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly
Se lo spazio dei nomi era TopNamespace.Sub+Namespace, la stringa dovrà precedere il segno più (+) con un carattere di escape (\) per impedire che venga interpretato come separatore di annidamento. La reflection genera questa stringa come indicato di seguito:
TopNamespace.Sub\+Namespace.ContainingClass+NestedClass,MyAssembly
Un "++" diventa "\+\+", e "\" diventa "\\".
Questo nome qualificato può essere persistente e usato in un secondo momento per caricare l'oggetto Type. Per cercare e caricare un Typeoggetto , usare GetType solo con il nome del tipo o con il nome del tipo qualificato dell'assembly. GetType con il nome del tipo cercherà solo l'assembly Type del chiamante e quindi nell'assembly di sistema. GetType con il nome del tipo qualificato dell'assembly cercherà in Type qualsiasi assembly.
I nomi dei tipi possono includere caratteri finali che indicano informazioni aggiuntive sul tipo, ad esempio se il tipo è un tipo di riferimento, un tipo di puntatore o un tipo di matrice. Per recuperare il nome del tipo senza questi caratteri finali, usare t.GetElementType().ToString()
, dove t
è il tipo.
Gli spazi sono rilevanti in tutti i componenti del nome del tipo, ad eccezione del nome dell'assembly. Nel nome dell'assembly gli spazi prima del separatore ',' sono rilevanti, ma gli spazi dopo il separatore ',' vengono ignorati.
Il nome di un tipo generico termina con un backtick (') seguito da cifre che rappresentano il numero di argomenti di tipo generico. Lo scopo di questo mangling nome è consentire ai compilatori di supportare tipi generici con lo stesso nome, ma con numeri diversi di parametri di tipo, che si verificano nello stesso ambito. Ad esempio, la reflection restituisce i nomi Tuple`1
mangled e dai metodi Tuple(Of T)
generici e Tuple`2
Tuple(Of T0, T1)
in Visual Basic o Tuple<T0, T1>
Tuple<T>
in Visual C#.
Per i tipi generici, l'elenco degli argomenti di tipo è racchiuso tra parentesi quadre e gli argomenti di tipo sono separati da virgole. Ad esempio, un generico Dictionary<TKey,TValue> ha due parametri di tipo. Una Dictionary<TKey,TValue> di con chiavi di MyType
tipo String può essere rappresentata come segue:
System.Collections.Generic.Dictionary`2[System.String,MyType]
Per specificare un tipo qualificato per assembly all'interno di un elenco di argomenti di tipo, racchiudere il tipo qualificato dell'assembly tra parentesi quadre. In caso contrario, le virgole che separano le parti del nome qualificato dell'assembly vengono interpretate come delimitazioni di argomenti di tipo aggiuntivi. Ad esempio, un Dictionary<TKey,TValue> oggetto di fromMyAssembly.dll, con chiavi di MyType
tipo String, può essere specificato come segue:
Type.GetType("System.Collections.Generic.Dictionary`2[System.String,[MyType,MyAssembly]]")
Nota
Un tipo qualificato per assembly può essere racchiuso tra parentesi quadre solo quando viene visualizzato all'interno di un elenco di parametri di tipo. Le regole per la ricerca di assembly per tipi qualificati e non qualificati negli elenchi di parametri di tipo sono uguali alle regole per i tipi nongenerici qualificati e non qualificati.
I tipi nullable sono un caso speciale di tipi generici. Ad esempio, un valore Nullable è rappresentato dalla stringa "System.Nullable'1 Int32 [System.Int32]".
Nota
In C#, C++e Visual Basic è anche possibile ottenere tipi nullable usando operatori di tipo. Ad esempio, il tipo nullable Boolean viene restituito da typeof(Nullable<bool>)
in C#, Nullable<Boolean>::typeid
da in C++e da GetType(Nullable(Of Boolean))
in Visual Basic.
Nella tabella seguente viene illustrata la sintassi usata per GetType
vari tipi.
Ottenere | Uso |
---|---|
Nullable Int32 | Type.GetType("System.Nullable`1[System.Int32]") |
Puntatore non gestito a MyType |
Type.GetType("MyType*") |
Puntatore non gestito a un puntatore a MyType |
Type.GetType("MyType**") |
Puntatore gestito o riferimento a MyType |
Type.GetType("MyType&") . Si noti che, a differenza dei puntatori, i riferimenti sono limitati a un solo livello. |
Una classe padre e una classe annidata | Type.GetType("MyParentClass+MyNestedClass") |
Matrice unidimensionale con un limite inferiore pari a 0 | Type.GetType("MyType[]") |
Matrice unidimensionale con un limite inferiore sconosciuto | Type.GetType("MyType[*]") |
Matrice ndimensionale | Una virgola (,) tra parentesi un totale di n-1 volte. Ad esempio, System.Object[,,] rappresenta una matrice tridimensionale Object . |
Matrice di matrici unidimensionali | Type.GetType("MyType[][]") |
Matrice bidimensionale rettangolare con limiti inferiori sconosciuti | Type.GetType("MyType[,]") |
Tipo generico con un argomento di tipo | Type.GetType("MyGenericType`1[MyType]") |
Tipo generico con due argomenti di tipo | Type.GetType("MyGenericType`2[MyType,AnotherType]") |
Tipo generico con due argomenti di tipo qualificato dall'assembly | Type.GetType("MyGenericType`2[[MyType,MyAssembly],[AnotherType,AnotherAssembly]]") |
Tipo generico qualificato dall'assembly con un argomento di tipo qualificato dall'assembly | Type.GetType("MyGenericType`1[[MyType,MyAssembly]],MyGenericTypeAssembly") |
Tipo generico il cui argomento di tipo è un tipo generico con due argomenti di tipo | Type.GetType("MyGenericType`1[AnotherGenericType`2[MyType,AnotherType]]") |
Vedi anche
- String
- TypeLoadException
- AssemblyQualifiedName
- GetAssembly(Type)
- GetType(String)
- AssemblyName
- Specifica dei nomi di tipi completi
Si applica a
GetType(String, Boolean)
- Origine:
- Type.CoreCLR.cs
- Origine:
- Type.CoreCLR.cs
- Origine:
- Type.CoreCLR.cs
Ottiene l'oggetto Type con il nome specificato, eseguendo una ricerca con distinzione tra maiuscole e minuscole e specificando se generare un'eccezione in caso il tipo non venga trovato.
public:
static Type ^ GetType(System::String ^ typeName, bool throwOnError);
public static Type GetType (string typeName, bool throwOnError);
public static Type? GetType (string typeName, bool throwOnError);
static member GetType : string * bool -> Type
Public Shared Function GetType (typeName As String, throwOnError As Boolean) As Type
Parametri
- typeName
- String
Nome qualificato dall'assembly del tipo da ottenere. Vedere AssemblyQualifiedName. Se il tipo si trova nell'assembly attualmente in esecuzione o in mscorlib.dll/System.Private.CoreLib.dll, è sufficiente specificare il nome del tipo qualificato dal relativo spazio dei nomi.
- throwOnError
- Boolean
true
per generare un'eccezione se non è possibile trovare il tipo; false
per restituire null
. Se si specifica false
vengono eliminate alcune condizioni di eccezione, ma non tutte. Vedere la sezione relativa alle eccezioni.
Restituisce
Tipo con il nome specificato. Se il tipo non viene trovato, il parametro throwOnError
specifica se viene restituito null
o se viene generata un'eccezione. In alcuni casi, viene generata un'eccezione indipendentemente dal valore di throwOnError
. Vedere la sezione relativa alle eccezioni.
Eccezioni
typeName
è null
.
Viene richiamato un inizializzatore di classi e viene generata un'eccezione.
throwOnError
è true
e il tipo non è stato trovato.
-oppure-
throwOnError
è true
e typeName
contiene caratteri non validi, ad esempio una scheda incorporata.
-oppure-
throwOnError
è true
e typeName
è una stringa vuota.
-oppure-
throwOnError
è true
e typeName
rappresenta un tipo di matrice con una dimensione non valida.
-oppure-
typeName
rappresenta una matrice di TypedReference.
throwOnError
è true
e la sintassi di typeName
non è valida. Ad esempio: "MyType[,*,]".
-oppure-
typeName
rappresenta un tipo generico che ha un tipo di puntatore, un tipo ByRef
o Void tra i relativi argomenti di tipo.
-oppure-
typeName
rappresenta un tipo generico che ha un numero errato di argomenti di tipo.
-oppure-
typeName
rappresenta un tipo generico e uno dei relativi argomenti di tipo non soddisfa i vincoli per il parametro di tipo corrispondente.
throwOnError
è true
e l'assembly o una delle sue dipendenze non è stato trovato.
L'assembly o una delle relative dipendenze è stato trovato, ma non può essere caricato.
Nota: in .NET per le app di Windows Store o nella libreria di classi portabile intercettare invece l'eccezione della classe di base, IOException, .
L'assembly o una delle relative dipendenze non è valido per il runtime attualmente caricato.
Esempio
Nell'esempio seguente viene recuperato il tipo di System.Int32
e viene utilizzato tale oggetto type per visualizzare la FullName proprietà di System.Int32
. Se un oggetto tipo fa riferimento a un assembly che non esiste, in questo esempio viene generata un'eccezione.
using namespace System;
int main()
{
try {
// Get the type of a specified class.
Type^ myType1 = Type::GetType( "System.Int32" );
Console::WriteLine( "The full name is {0}.\n", myType1->FullName );
}
catch ( TypeLoadException^ e ) {
Console::WriteLine("{0}: Unable to load type System.Int32",
e->GetType()->Name);
}
try {
// Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
Type^ myType2 = Type::GetType( "NoneSuch", true );
Console::WriteLine( "The full name is {0}.", myType2->FullName );
}
catch ( TypeLoadException^ e ) {
Console::WriteLine("{0}: Unable to load type NoneSuch",
e->GetType()->Name);
}
}
// The example displays the following output:
// The full name is System.Int32.
//
// TypeLoadException: Unable to load type NoneSuch
using System;
class Example
{
public static void Main()
{
try {
// Get the type of a specified class.
Type myType1 = Type.GetType("System.Int32");
Console.WriteLine("The full name is {0}.\n", myType1.FullName);
}
catch (TypeLoadException e)
{
Console.WriteLine("{0}: Unable to load type System.Int32", e.GetType().Name);
}
try {
// Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
Type myType2 = Type.GetType("NoneSuch", true);
Console.WriteLine("The full name is {0}.", myType2.FullName);
}
catch(TypeLoadException e) {
Console.WriteLine("{0}: Unable to load type NoneSuch", e.GetType().Name);
}
}
}
// The example displays the following output:
// The full name is System.Int32.
//
// TypeLoadException: Unable to load type NoneSuch
open System
try
// Get the type of a specified class.
let myType1 = Type.GetType "System.Int32"
printfn $"The full name is {myType1.FullName}.\n"
with :? TypeLoadException as e ->
printfn $"{e.GetType().Name}: Unable to load type System.Int32"
try
// Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
let myType2 = Type.GetType("NoneSuch", true)
printfn $"The full name is {myType2.FullName}."
with :? TypeLoadException as e ->
printfn $"{e.GetType().Name}: Unable to load type NoneSuch"
// The example displays the following output:
// The full name is System.Int32.
//
// TypeLoadException: Unable to load type NoneSuch
Class Example
Public Shared Sub Main()
Try
' Get the type of the specified class.
Dim myType1 As Type = Type.GetType("System.Int32")
Console.WriteLine("The full name is {0}.", myType1.FullName)
Catch e As TypeLoadException
Console.WriteLine("{0}: Unable to load type System.Int32",
e.GetType().Name)
End Try
Console.WriteLine()
Try
' Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
Dim myType2 As Type = Type.GetType("NoneSuch", True)
Console.WriteLine("The full name is {0}.", myType2.FullName)
Catch e As TypeLoadException
Console.WriteLine("{0}: Unable to load type NoneSuch", e.GetType().Name)
End Try
End Sub
End Class
' The example displays the following output:
' The full name is System.Int32.
'
' TypeLoadException: Unable to load type NoneSuch
Commenti
È possibile utilizzare il GetType metodo per ottenere un Type oggetto per un tipo in un altro assembly se si conosce il nome completo dell'assembly, che può essere ottenuto da AssemblyQualifiedName.
GetType causa il caricamento dell'assembly specificato in typeName
. È anche possibile caricare un assembly usando il Assembly.Load metodo e quindi usare il Assembly.GetType metodo o Assembly.GetTypes per ottenere Type oggetti . Se un tipo si trova in un assembly noto al programma in fase di compilazione, è più efficiente usare typeof
in C# o l'operatore GetType
in Visual Basic.
GetType
funziona solo sugli assembly caricati dal disco. Se si chiama GetType
per cercare un tipo definito in un assembly dinamico definito usando i System.Reflection.Emit servizi, è possibile che si verifichi un comportamento incoerente. Il comportamento dipende dal fatto che l'assembly dinamico sia persistente, ovvero creato usando le RunAndSave
modalità di accesso o Save
dell'enumerazione System.Reflection.Emit.AssemblyBuilderAccess . Se l'assembly dinamico è persistente ed è stato scritto su disco prima GetType
della chiamata, il caricatore trova l'assembly salvato su disco, carica tale assembly e recupera il tipo da tale assembly. Se l'assembly non è stato salvato su disco quando GetType
viene chiamato, il metodo restituisce null
.
GetType
non comprende gli assembly dinamici temporanei; pertanto, la chiamata GetType
per recuperare un tipo in un assembly dinamico temporaneo restituisce null
.
Per usare GetType
in un modulo dinamico, sottoscrivere l'evento AppDomain.AssemblyResolve e chiamare GetType
prima di salvare. In caso contrario, si otterranno due copie dell'assembly in memoria.
Il throwOnError
parametro specifica cosa accade quando il tipo non viene trovato e elimina anche determinate altre condizioni di eccezione, come descritto nella sezione Eccezioni. Alcune eccezioni vengono generate indipendentemente dal valore di throwOnError
. Ad esempio, se il tipo viene trovato ma non può essere caricato, viene generata un'eccezione TypeLoadException anche se throwOnError
è false
.
Nella tabella seguente vengono illustrati i membri di una classe base restituiti dai Get
metodi quando si riflette su un tipo.
Tipo di membro | Static | Non statico |
---|---|---|
Costruttore | No | No |
Campo | No | Sì. Un campo è sempre hide-by-name-and-signature. |
Evento | Non applicabile | La regola di sistema dei tipi comune è che l'ereditarietà è uguale a quella dei metodi che implementano la proprietà . La reflection considera le proprietà come hide-by-name-and-signature. Vedere la nota 2 di seguito. |
Metodo | No | Sì. Un metodo (sia virtuale che non virtuale) può essere hide-by-name o hide-by-name-and-signature. |
Tipo annidato | No | No |
Proprietà | Non applicabile | La regola di sistema dei tipi comune è che l'ereditarietà è uguale a quella dei metodi che implementano la proprietà . La reflection considera le proprietà come hide-by-name-and-signature. Vedere la nota 2 di seguito. |
Hide-by-name-and-signature considera tutte le parti della firma, inclusi modificatori personalizzati, tipi restituiti, tipi di parametro, sentinel e convenzioni di chiamata non gestite. Si tratta di un confronto binario.
Per la reflection, le proprietà e gli eventi sono hide-by-name-and-signature. Se nella classe base è presente una proprietà con una funzione di accesso get e una funzione di accesso set, ma la classe derivata ha solo una funzione di accesso get, la proprietà della classe derivata nasconde la proprietà della classe base e non sarà possibile accedere al setter nella classe base.
Gli attributi personalizzati non fanno parte del sistema di tipi comuni.
Le matrici o i tipi COM non vengono cercati a meno che non siano già stati caricati nella tabella delle classi disponibili.
typeName
può essere il nome del tipo qualificato dal relativo spazio dei nomi o un nome qualificato dall'assembly che include una specifica del nome dell'assembly. Vedere AssemblyQualifiedName.
Se typeName
include lo spazio dei nomi ma non il nome dell'assembly, questo metodo cerca solo l'assembly dell'oggetto chiamante e mscorlib.dll/System.Private.CoreLib.dll, in tale ordine. Se typeName è completo con il nome dell'assembly parziale o completo, questo metodo esegue la ricerca nell'assembly specificato. Se l'assembly ha un nome sicuro, è necessario un nome assembly completo.
La AssemblyQualifiedName proprietà restituisce un nome di tipo completo, inclusi i tipi annidati, il nome dell'assembly e gli argomenti generici. Tutti i compilatori che supportano Common Language Runtime generano il nome semplice di una classe annidata e la reflection costruisce un nome mangled quando viene eseguita una query, in base alle convenzioni seguenti.
Nota
L'architettura del processore fa parte dell'identità dell'assembly e può essere specificata come parte delle stringhe del nome dell'assembly. Ad esempio, "ProcessorArchitecture=msil". Tuttavia, non è incluso nella stringa restituita dalla AssemblyQualifiedName proprietà, per motivi di compatibilità. È anche possibile caricare i tipi creando un AssemblyName oggetto e passandolo a un overload appropriato del Load metodo . È quindi possibile usare il Assembly.GetType metodo per caricare i tipi dall'assembly. Vedere anche AssemblyName.ProcessorArchitecture.
Delimitatore | Significato |
---|---|
Barra rovesciata (\) | Carattere di escape. |
Backtick (') | Precede una o più cifre che rappresentano il numero di parametri di tipo, che si trovano alla fine del nome di un tipo generico. |
Parentesi quadre ([]) | Racchiudere un elenco di argomenti di tipo generico per un tipo generico costruito; all'interno di un elenco di argomenti di tipo racchiudere un tipo qualificato dall'assembly. |
Virgola (,) | Precede il nome dell'assembly. |
Punto (.) | Indica gli identificatori dello spazio dei nomi. |
Segno più (+) | Precede una classe nidificata. |
Ad esempio, il nome completo per una classe potrebbe essere simile al seguente:
TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly
Se lo spazio dei nomi fosse TopNamespace.Sub+Namespace, la stringa dovrà precedere il segno più (+) con un carattere di escape (\) per impedire che venga interpretato come separatore di annidamento. La reflection genera questa stringa come segue:
TopNamespace.Sub\+Namespace.ContainingClass+NestedClass,MyAssembly
"++" diventa "\+\+" e "\" diventa "\\".
Questo nome completo può essere salvato in modo permanente e usato in seguito per caricare l'oggetto Type. Per cercare e caricare un Typeoggetto , usare GetType solo con il nome del tipo o con il nome del tipo completo dell'assembly. GetType con il nome del tipo cercherà Type solo nell'assembly del chiamante e quindi nell'assembly di sistema. GetType con il nome di tipo completo dell'assembly Type cercherà in qualsiasi assembly.
I nomi dei tipi possono includere caratteri finali che indicano informazioni aggiuntive sul tipo, ad esempio se il tipo è un tipo riferimento, un tipo di puntatore o un tipo di matrice. Per recuperare il nome del tipo senza questi caratteri finali, usare t.GetElementType().ToString()
, dove t
è il tipo .
Gli spazi sono rilevanti in tutti i componenti del nome del tipo, ad eccezione del nome dell'assembly. Nel nome dell'assembly gli spazi prima del separatore ',' sono rilevanti, ma gli spazi dopo il separatore ',' vengono ignorati.
Il nome di un tipo generico termina con un backtick (') seguito da cifre che rappresentano il numero di argomenti di tipo generico. Lo scopo di questo mangling del nome è consentire ai compilatori di supportare tipi generici con lo stesso nome ma con numeri diversi di parametri di tipo, che si verificano nello stesso ambito. Ad esempio, la reflection restituisce i nomi Tuple`1
mangled e Tuple`2
dai metodi Tuple(Of T)
generici e Tuple(Of T0, T1)
in Visual Basic o Tuple<T>
e Tuple<T0, T1>
in Visual C#.
Per i tipi generici, l'elenco di argomenti di tipo è racchiuso tra parentesi quadre e gli argomenti di tipo sono separati da virgole. Ad esempio, un generico Dictionary<TKey,TValue> ha due parametri di tipo. Un Dictionary<TKey,TValue> oggetto di MyType
con chiavi di tipo String può essere rappresentato come segue:
System.Collections.Generic.Dictionary`2[System.String,MyType]
Per specificare un tipo qualificato dall'assembly all'interno di un elenco di argomenti di tipo, racchiudere il tipo qualificato dall'assembly tra parentesi quadre. In caso contrario, le virgole che separano le parti del nome completo dell'assembly vengono interpretate come delimitando argomenti di tipo aggiuntivi. Ad esempio, un Dictionary<TKey,TValue> di da MyType
MyAssembly.dll, con chiavi di tipo String, può essere specificato come segue:
Type.GetType("System.Collections.Generic.Dictionary`2[System.String,[MyType,MyAssembly]]")
Nota
Un tipo qualificato dall'assembly può essere racchiuso tra parentesi quadre solo quando viene visualizzato all'interno di un elenco di parametri di tipo. Le regole per la ricerca di assembly per tipi qualificati e non qualificati negli elenchi di parametri di tipo corrispondono alle regole per i tipi non generici qualificati e non qualificati.
I tipi nullable sono un caso speciale di tipi generici. Ad esempio, un valore nullable Int32 è rappresentato dalla stringa "System.Nullable'1[System.Int32]".
Nota
In C#, C++ e Visual Basic è anche possibile ottenere tipi nullable usando operatori di tipo. Ad esempio, il tipo nullable Boolean viene restituito da typeof(Nullable<bool>)
in C#, da Nullable<Boolean>::typeid
in C++ e da GetType(Nullable(Of Boolean))
in Visual Basic.
Nella tabella seguente viene illustrata la sintassi usata con GetType
per vari tipi.
Ottenere | Uso |
---|---|
Un valore nullable Int32 | Type.GetType("System.Nullable`1[System.Int32]") |
Puntatore non gestito a MyType |
Type.GetType("MyType*") |
Puntatore non gestito a un puntatore a MyType |
Type.GetType("MyType**") |
Puntatore gestito o riferimento a MyType |
Type.GetType("MyType&") . Si noti che, a differenza dei puntatori, i riferimenti sono limitati a un solo livello. |
Una classe padre e una classe annidata | Type.GetType("MyParentClass+MyNestedClass") |
Matrice unidimensionale con un limite inferiore pari a 0 | Type.GetType("MyArray[]") |
Matrice unidimensionale con un limite inferiore sconosciuto | Type.GetType("MyArray[*]") |
Matrice ndimensionale | Una virgola (,) tra parentesi un totale di n-1 volte. Ad esempio, System.Object[,,] rappresenta una matrice tridimensionale Object . |
Matrice di una matrice bidimensionale | Type.GetType("MyArray[][]") |
Matrice bidimensionale rettangolare con limiti inferiori sconosciuti | Type.GetType("MyArray[,]") |
Tipo generico con un argomento di tipo | Type.GetType("MyGenericType`1[MyType]") |
Tipo generico con due argomenti di tipo | Type.GetType("MyGenericType`2[MyType,AnotherType]") |
Tipo generico con due argomenti di tipo qualificato dall'assembly | Type.GetType("MyGenericType`2[[MyType,MyAssembly],[AnotherType,AnotherAssembly]]") |
Tipo generico qualificato dall'assembly con un argomento di tipo qualificato dall'assembly | Type.GetType("MyGenericType`1[[MyType,MyAssembly]],MyGenericTypeAssembly") |
Tipo generico il cui argomento di tipo è un tipo generico con due argomenti di tipo | Type.GetType("MyGenericType`1[AnotherGenericType`2[MyType,AnotherType]]") |
Vedi anche
- String
- TypeLoadException
- AssemblyQualifiedName
- GetAssembly(Type)
- GetType(String)
- AssemblyName
- Specifica dei nomi di tipi completi
Si applica a
GetType(String, Boolean, Boolean)
- Origine:
- Type.CoreCLR.cs
- Origine:
- Type.CoreCLR.cs
- Origine:
- Type.CoreCLR.cs
Ottiene l'oggetto Type con il nome specificato, che indica se generare un'eccezione quando viene trovato il tipo e se eseguire una ricerca con distinzione tra maiuscole e minuscole.
public:
static Type ^ GetType(System::String ^ typeName, bool throwOnError, bool ignoreCase);
public static Type GetType (string typeName, bool throwOnError, bool ignoreCase);
public static Type? GetType (string typeName, bool throwOnError, bool ignoreCase);
static member GetType : string * bool * bool -> Type
Public Shared Function GetType (typeName As String, throwOnError As Boolean, ignoreCase As Boolean) As Type
Parametri
- typeName
- String
Nome qualificato dall'assembly del tipo da ottenere. Vedere AssemblyQualifiedName. Se il tipo si trova nell'assembly attualmente in esecuzione o in mscorlib.dll/System.Private.CoreLib.dll, è sufficiente specificare il nome del tipo qualificato dal relativo spazio dei nomi.
- throwOnError
- Boolean
true
per generare un'eccezione se non è possibile trovare il tipo; false
per restituire null
. Se si specifica false
vengono eliminate alcune condizioni di eccezione, ma non tutte. Vedere la sezione relativa alle eccezioni.
- ignoreCase
- Boolean
true
per eseguire una ricerca di typeName
senza distinzione tra maiuscole minuscole, false
per eseguire una ricerca di typeName
con distinzione tra maiuscole e minuscole.
Restituisce
Tipo con il nome specificato. Se il tipo non viene trovato, il parametro throwOnError
specifica se viene restituito null
o se viene generata un'eccezione. In alcuni casi, viene generata un'eccezione indipendentemente dal valore di throwOnError
. Vedere la sezione relativa alle eccezioni.
Eccezioni
typeName
è null
.
Viene richiamato un inizializzatore di classi e viene generata un'eccezione.
throwOnError
è true
e il tipo non è stato trovato.
-oppure-
throwOnError
è true
e typeName
contiene caratteri non validi, ad esempio una scheda incorporata.
-oppure-
throwOnError
è true
e typeName
è una stringa vuota.
-oppure-
throwOnError
è true
e typeName
rappresenta un tipo di matrice con una dimensione non valida.
-oppure-
typeName
rappresenta una matrice di TypedReference.
throwOnError
è true
e la sintassi di typeName
non è valida. Ad esempio: "MyType[,*,]".
-oppure-
typeName
rappresenta un tipo generico che ha un tipo di puntatore, un tipo ByRef
o Void tra i relativi argomenti di tipo.
-oppure-
typeName
rappresenta un tipo generico che ha un numero errato di argomenti di tipo.
-oppure-
typeName
rappresenta un tipo generico e uno dei relativi argomenti di tipo non soddisfa i vincoli per il parametro di tipo corrispondente.
throwOnError
è true
e l'assembly o una delle sue dipendenze non è stato trovato.
L'assembly o una delle relative dipendenze è stato trovato, ma non può essere caricato.
L'assembly non è valido per il runtime attualmente caricato.
Commenti
È possibile utilizzare il GetType metodo per ottenere un Type oggetto per un tipo in un altro assembly se si conosce il nome completo dell'assembly, che può essere ottenuto da AssemblyQualifiedName.
GetType causa il caricamento dell'assembly specificato in typeName
. È anche possibile caricare un assembly usando il Assembly.Load metodo e quindi usare il Assembly.GetType metodo o Assembly.GetTypes per ottenere Type oggetti . Se un tipo si trova in un assembly noto al programma in fase di compilazione, è più efficiente usare typeof
in C# o l'operatore GetType
in Visual Basic.
GetType
funziona solo sugli assembly caricati dal disco. Se si chiama GetType
per cercare un tipo definito in un assembly dinamico definito usando i System.Reflection.Emit servizi, è possibile che si verifichi un comportamento incoerente. Il comportamento dipende dal fatto che l'assembly dinamico sia persistente, ovvero creato usando le RunAndSave
modalità di accesso o Save
dell'enumerazione System.Reflection.Emit.AssemblyBuilderAccess . Se l'assembly dinamico è persistente ed è stato scritto su disco prima GetType
della chiamata, il caricatore trova l'assembly salvato su disco, carica tale assembly e recupera il tipo da tale assembly. Se l'assembly non è stato salvato su disco quando GetType
viene chiamato, il metodo restituisce null
.
GetType
non comprende gli assembly dinamici temporanei; pertanto, la chiamata GetType
per recuperare un tipo in un assembly dinamico temporaneo restituisce null
.
Per usare GetType
in un modulo dinamico, sottoscrivere l'evento AppDomain.AssemblyResolve e chiamare GetType
prima di salvare. In caso contrario, si otterranno due copie dell'assembly in memoria.
Il throwOnError
parametro specifica cosa accade quando il tipo non viene trovato e elimina anche determinate altre condizioni di eccezione, come descritto nella sezione Eccezioni. Alcune eccezioni vengono generate indipendentemente dal valore di throwOnError
. Ad esempio, se il tipo viene trovato ma non può essere caricato, viene generata un'eccezione TypeLoadException anche se throwOnError
è false
.
Nella tabella seguente vengono illustrati i membri di una classe base restituiti dai Get
metodi quando si riflette su un tipo.
Tipo di membro | Static | Non statico |
---|---|---|
Costruttore | No | No |
Campo | No | Sì. Un campo è sempre hide-by-name-and-signature. |
Evento | Non applicabile | La regola di sistema dei tipi comune è che l'ereditarietà è uguale a quella dei metodi che implementano la proprietà . La reflection considera le proprietà come hide-by-name-and-signature. Vedere la nota 2 di seguito. |
Metodo | No | Sì. Un metodo (sia virtuale che non virtuale) può essere hide-by-name o hide-by-name-and-signature. |
Tipo annidato | No | No |
Proprietà | Non applicabile | La regola di sistema dei tipi comune è che l'ereditarietà è uguale a quella dei metodi che implementano la proprietà . La reflection considera le proprietà come hide-by-name-and-signature. Vedere la nota 2 di seguito. |
Hide-by-name-and-signature considera tutte le parti della firma, inclusi modificatori personalizzati, tipi restituiti, tipi di parametro, sentinel e convenzioni di chiamata non gestite. Si tratta di un confronto binario.
Per la reflection, le proprietà e gli eventi sono hide-by-name-and-signature. Se nella classe base è presente una proprietà con una funzione di accesso get e una funzione di accesso set, ma la classe derivata ha solo una funzione di accesso get, la proprietà della classe derivata nasconde la proprietà della classe base e non sarà possibile accedere al setter nella classe base.
Gli attributi personalizzati non fanno parte del sistema di tipi comuni.
Le matrici o i tipi COM non vengono cercati a meno che non siano già stati caricati nella tabella delle classi disponibili.
typeName
può essere il nome del tipo qualificato dal relativo spazio dei nomi o un nome qualificato dall'assembly che include una specifica del nome dell'assembly. Vedere AssemblyQualifiedName.
Se typeName
include lo spazio dei nomi ma non il nome dell'assembly, questo metodo cerca solo l'assembly dell'oggetto chiamante e mscorlib.dll/System.Private.CoreLib.dll, in tale ordine. Se typeName è completo con il nome dell'assembly parziale o completo, questo metodo esegue la ricerca nell'assembly specificato. Se l'assembly ha un nome sicuro, è necessario un nome assembly completo.
La AssemblyQualifiedName proprietà restituisce un nome di tipo completo, inclusi i tipi annidati, il nome dell'assembly e gli argomenti di tipo. Tutti i compilatori che supportano Common Language Runtime generano il nome semplice di una classe annidata e la reflection costruisce un nome mangled quando viene eseguita una query, in base alle convenzioni seguenti.
Nota
L'architettura del processore fa parte dell'identità dell'assembly e può essere specificata come parte delle stringhe del nome dell'assembly. Ad esempio, "ProcessorArchitecture=msil". Tuttavia, non è incluso nella stringa restituita dalla AssemblyQualifiedName proprietà, per motivi di compatibilità. È anche possibile caricare i tipi creando un AssemblyName oggetto e passandolo a un overload appropriato del Load metodo . È quindi possibile usare il Assembly.GetType metodo per caricare i tipi dall'assembly. Vedere anche AssemblyName.ProcessorArchitecture.
Delimitatore | Significato |
---|---|
Barra rovesciata (\) | Carattere di escape. |
Backtick (') | Precede una o più cifre che rappresentano il numero di parametri di tipo, che si trovano alla fine del nome di un tipo generico. |
Parentesi quadre ([]) | Racchiudere un elenco di argomenti di tipo generico per un tipo generico costruito; all'interno di un elenco di argomenti di tipo racchiudere un tipo qualificato dall'assembly. |
Virgola (,) | Precede il nome dell'assembly. |
Punto (.) | Indica gli identificatori dello spazio dei nomi. |
Segno più (+) | Precede una classe nidificata. |
Ad esempio, il nome completo per una classe potrebbe essere simile al seguente:
TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly
Se lo spazio dei nomi fosse TopNamespace.Sub+Namespace, la stringa dovrà precedere il segno più (+) con un carattere di escape (\) per impedire che venga interpretato come separatore di annidamento. La reflection genera questa stringa come segue:
TopNamespace.Sub\+Namespace.ContainingClass+NestedClass,MyAssembly
"++" diventa "\+\+" e "\" diventa "\\".
Questo nome completo può essere salvato in modo permanente e usato in seguito per caricare l'oggetto Type. Per cercare e caricare un Typeoggetto , usare GetType solo con il nome del tipo o con il nome del tipo completo dell'assembly. GetType con il nome del tipo cercherà Type solo nell'assembly del chiamante e quindi nell'assembly di sistema. GetType con il nome di tipo completo dell'assembly Type cercherà in qualsiasi assembly.
I nomi dei tipi possono includere caratteri finali che indicano informazioni aggiuntive sul tipo, ad esempio se il tipo è un tipo riferimento, un tipo di puntatore o un tipo di matrice. Per recuperare il nome del tipo senza questi caratteri finali, usare t.GetElementType().ToString()
, dove t
è il tipo .
Gli spazi sono rilevanti in tutti i componenti del nome del tipo, ad eccezione del nome dell'assembly. Nel nome dell'assembly gli spazi prima del separatore ',' sono rilevanti, ma gli spazi dopo il separatore ',' vengono ignorati.
Il nome di un tipo generico termina con un backtick (') seguito da cifre che rappresentano il numero di argomenti di tipo generico. Lo scopo di questo mangling nome è consentire ai compilatori di supportare tipi generici con lo stesso nome, ma con numeri diversi di parametri di tipo, che si verificano nello stesso ambito. Ad esempio, la reflection restituisce i nomi Tuple`1
mangled e dai metodi Tuple(Of T)
generici e Tuple`2
Tuple(Of T0, T1)
in Visual Basic o Tuple<T0, T1>
Tuple<T>
in Visual C#.
Per i tipi generici, l'elenco degli argomenti di tipo è racchiuso tra parentesi quadre e gli argomenti di tipo sono separati da virgole. Ad esempio, un generico Dictionary<TKey,TValue> ha due parametri di tipo. Una Dictionary<TKey,TValue> di con chiavi di MyType
tipo String può essere rappresentata come segue:
System.Collections.Generic.Dictionary`2[System.String,MyType]
Per specificare un tipo qualificato per assembly all'interno di un elenco di argomenti di tipo, racchiudere il tipo qualificato dell'assembly tra parentesi quadre. In caso contrario, le virgole che separano le parti del nome qualificato dell'assembly vengono interpretate come delimitazioni di argomenti di tipo aggiuntivi. Ad esempio, un Dictionary<TKey,TValue> oggetto di MyType
MyAssembly.dll, con chiavi di tipo String, può essere specificato come segue:
Type.GetType("System.Collections.Generic.Dictionary`2[System.String,[MyType,MyAssembly]]")
Nota
Un tipo qualificato per assembly può essere racchiuso tra parentesi quadre solo quando viene visualizzato all'interno di un elenco di parametri di tipo. Le regole per la ricerca di assembly per tipi qualificati e non qualificati negli elenchi di parametri di tipo sono uguali alle regole per i tipi nongenerici qualificati e non qualificati.
I tipi nullable sono un caso speciale di tipi generici. Ad esempio, un valore Nullable è rappresentato dalla stringa "System.Nullable'1 Int32 [System.Int32]".
Nota
In C#, C++e Visual Basic è anche possibile ottenere tipi nullable usando operatori di tipo. Ad esempio, il tipo nullable Boolean viene restituito da typeof(Nullable<bool>)
in C#, Nullable<Boolean>::typeid
da in C++e da GetType(Nullable(Of Boolean))
in Visual Basic.
Nella tabella seguente viene illustrata la sintassi usata per GetType
vari tipi.
Ottenere | Uso |
---|---|
Nullable Int32 | Type.GetType("System.Nullable`1[System.Int32]") |
Puntatore non gestito a MyType |
Type.GetType("MyType*") |
Puntatore non gestito a un puntatore a MyType |
Type.GetType("MyType**") |
Puntatore gestito o riferimento a MyType |
Type.GetType("MyType&") . Si noti che, a differenza dei puntatori, i riferimenti sono limitati a un solo livello. |
Classe padre e classe annidata | Type.GetType("MyParentClass+MyNestedClass") |
Matrice unidimensionale con un limite inferiore di 0 | Type.GetType("MyArray[]") |
Matrice unidimensionale con un limite inferiore sconosciuto | Type.GetType("MyArray[*]") |
Matrice n-dimensionale | Una virgola (,) all'interno delle parentesi quadre un totale di n-1 volte. Ad esempio, System.Object[,,] rappresenta una matrice tridimensionale Object . |
Matrice bidimensionale | Type.GetType("MyArray[][]") |
Matrice rettangolare a due dimensioni con limiti inferiori sconosciuti | Type.GetType("MyArray[,]") |
Tipo generico con un argomento di tipo | Type.GetType("MyGenericType`1[MyType]") |
Tipo generico con due argomenti di tipo | Type.GetType("MyGenericType`2[MyType,AnotherType]") |
Tipo generico con due argomenti di tipo qualificato per assembly | Type.GetType("MyGenericType`2[[MyType,MyAssembly],[AnotherType,AnotherAssembly]]") |
Tipo generico qualificato per assembly con un argomento di tipo qualificato per assembly | Type.GetType("MyGenericType`1[[MyType,MyAssembly]],MyGenericTypeAssembly") |
Tipo generico il cui argomento di tipo è un tipo generico con due argomenti di tipo | Type.GetType("MyGenericType`1[AnotherGenericType`2[MyType,AnotherType]]") |
Vedi anche
- String
- TypeLoadException
- AssemblyQualifiedName
- GetAssembly(Type)
- GetType(String)
- AssemblyName
- Specifica dei nomi di tipo completi
Si applica a
GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>)
- Origine:
- Type.CoreCLR.cs
- Origine:
- Type.CoreCLR.cs
- Origine:
- Type.CoreCLR.cs
Ottiene il tipo con il nome specificato, fornendo facoltativamente metodi personalizzati per risolvere l'assembly e il tipo.
public:
static Type ^ GetType(System::String ^ typeName, Func<System::Reflection::AssemblyName ^, System::Reflection::Assembly ^> ^ assemblyResolver, Func<System::Reflection::Assembly ^, System::String ^, bool, Type ^> ^ typeResolver);
public static Type? GetType (string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly?>? assemblyResolver, Func<System.Reflection.Assembly?,string,bool,Type?>? typeResolver);
public static Type GetType (string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly> assemblyResolver, Func<System.Reflection.Assembly,string,bool,Type> typeResolver);
static member GetType : string * Func<System.Reflection.AssemblyName, System.Reflection.Assembly> * Func<System.Reflection.Assembly, string, bool, Type> -> Type
Public Shared Function GetType (typeName As String, assemblyResolver As Func(Of AssemblyName, Assembly), typeResolver As Func(Of Assembly, String, Boolean, Type)) As Type
Parametri
- typeName
- String
Nome del tipo da ottenere. Se viene fornito il parametro typeResolver
, il nome del tipo può essere qualsiasi stringa che typeResolver
è in grado di risolvere. Se il assemblyResolver
parametro viene fornito o se viene usata la risoluzione dei tipi standard, typeName
deve essere un nome qualificato per l'assembly (vedere AssemblyQualifiedName), a meno che il tipo non si trova nell'assembly attualmente in esecuzione o in mscorlib.dll/System.Private.CoreLib.dll, nel qual caso è sufficiente specificare il nome del tipo qualificato dal relativo spazio dei nomi.
- assemblyResolver
- Func<AssemblyName,Assembly>
Metodo che individua e restituisce l'assembly specificato in typeName
. Il nome dell'assembly viene passato a assemblyResolver
come oggetto AssemblyName. Se typeName
non contiene il nome di un assembly, assemblyResolver
non viene chiamato. Se assemblyResolver
non viene fornito, viene eseguita la risoluzione dell'assembly standard.
Attenzione: non passare metodi da chiamanti sconosciuti o non attendibili. In caso contrario, potrebbe verificarsi un'elevazione di privilegi per codice dannoso. Usare solo i metodi forniti o con cui si ha dimestichezza.
Metodo che individua e restituisce il tipo specificato da typeName
dall'assembly restituito da assemblyResolver
o dalla risoluzione dell'assembly standard. Se non viene fornito alcun assembly, il metodo typeResolver
può fornirne uno. Il metodo accetta inoltre un parametro che specifica se eseguire una ricerca senza fare distinzione tra maiuscole e minuscole. false
viene passato al parametro.
Attenzione: non passare metodi da chiamanti sconosciuti o non attendibili.
Restituisce
Tipo con il nome specificato, oppure null
se il tipo non viene trovato.
Eccezioni
typeName
è null
.
Viene richiamato un inizializzatore di classi e viene generata un'eccezione.
Si verifica un errore quando typeName
viene analizzato in un nome di tipo e un nome di assembly (ad esempio, quando il nome di tipo semplice include un carattere speciale senza escape).
-oppure-
typeName
rappresenta un tipo generico che ha un tipo di puntatore, un tipo ByRef
o Void tra i relativi argomenti di tipo.
-oppure-
typeName
rappresenta un tipo generico che ha un numero errato di argomenti di tipo.
-oppure-
typeName
rappresenta un tipo generico e uno dei relativi argomenti di tipo non soddisfa i vincoli per il parametro di tipo corrispondente.
typeName
rappresenta un tipo non valido, ad esempio una matrice di TypedReference.
L'assembly o una delle relative dipendenze è stato trovato, ma non può essere caricato.
-oppure-
typeName
contiene un nome di assembly non valido.
-oppure-
typeName
è un nome di assembly valido senza un nome di tipo.
L'assembly o una delle relative dipendenze non è valida per il runtime attualmente caricato.
Commenti
Gli scenari di utilizzo per questo metodo e i dettagli sui assemblyResolver
parametri e typeResolver
sono disponibili nell'overload del GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) metodo.
Nota
Se typeName
non è possibile trovare, la chiamata al GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>) metodo restituisce null
. Non genera un'eccezione. Per controllare se viene generata un'eccezione GetType , chiamare un overload del metodo con un throwOnError
parametro.
La chiamata all'overload di questo metodo è uguale a quella di chiamare l'overload del GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) metodo e specificando false
per i throwOnError
parametri e ignoreCase
.
Si applica a
GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean)
- Origine:
- Type.CoreCLR.cs
- Origine:
- Type.CoreCLR.cs
- Origine:
- Type.CoreCLR.cs
Ottiene il tipo con il nome specificato, indicando se generare un'eccezione se il tipo non viene trovato e fornendo facoltativamente metodi personalizzati per risolvere l'assembly e il tipo.
public:
static Type ^ GetType(System::String ^ typeName, Func<System::Reflection::AssemblyName ^, System::Reflection::Assembly ^> ^ assemblyResolver, Func<System::Reflection::Assembly ^, System::String ^, bool, Type ^> ^ typeResolver, bool throwOnError);
public static Type? GetType (string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly?>? assemblyResolver, Func<System.Reflection.Assembly?,string,bool,Type?>? typeResolver, bool throwOnError);
public static Type GetType (string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly> assemblyResolver, Func<System.Reflection.Assembly,string,bool,Type> typeResolver, bool throwOnError);
static member GetType : string * Func<System.Reflection.AssemblyName, System.Reflection.Assembly> * Func<System.Reflection.Assembly, string, bool, Type> * bool -> Type
Public Shared Function GetType (typeName As String, assemblyResolver As Func(Of AssemblyName, Assembly), typeResolver As Func(Of Assembly, String, Boolean, Type), throwOnError As Boolean) As Type
Parametri
- typeName
- String
Nome del tipo da ottenere. Se viene fornito il parametro typeResolver
, il nome del tipo può essere qualsiasi stringa che typeResolver
è in grado di risolvere. Se il assemblyResolver
parametro viene fornito o se viene usata la risoluzione dei tipi standard, typeName
deve essere un nome qualificato per l'assembly (vedere AssemblyQualifiedName), a meno che il tipo non si trova nell'assembly attualmente in esecuzione o in mscorlib.dll/System.Private.CoreLib.dll, nel qual caso è sufficiente specificare il nome del tipo qualificato dal relativo spazio dei nomi.
- assemblyResolver
- Func<AssemblyName,Assembly>
Metodo che individua e restituisce l'assembly specificato in typeName
. Il nome dell'assembly viene passato a assemblyResolver
come oggetto AssemblyName. Se typeName
non contiene il nome di un assembly, assemblyResolver
non viene chiamato. Se assemblyResolver
non viene fornito, viene eseguita la risoluzione dell'assembly standard.
Attenzione: non passare metodi da chiamanti sconosciuti o non attendibili. In caso contrario, potrebbe verificarsi un'elevazione di privilegi per codice dannoso. Usare solo i metodi forniti o con cui si ha dimestichezza.
Metodo che individua e restituisce il tipo specificato da typeName
dall'assembly restituito da assemblyResolver
o dalla risoluzione dell'assembly standard. Se non viene fornito alcun assembly, il metodo può fornirne uno. Il metodo accetta inoltre un parametro che specifica se eseguire una ricerca senza fare distinzione tra maiuscole e minuscole. false
viene passato al parametro.
Attenzione: non passare metodi da chiamanti sconosciuti o non attendibili.
- throwOnError
- Boolean
true
per generare un'eccezione se non è possibile trovare il tipo; false
per restituire null
. Se si specifica false
vengono eliminate alcune condizioni di eccezione, ma non tutte. Vedere la sezione relativa alle eccezioni.
Restituisce
Tipo con il nome specificato. Se il tipo non viene trovato, il parametro throwOnError
specifica se viene restituito null
o se viene generata un'eccezione. In alcuni casi, viene generata un'eccezione indipendentemente dal valore di throwOnError
. Vedere la sezione relativa alle eccezioni.
Eccezioni
typeName
è null
.
Viene richiamato un inizializzatore di classi e viene generata un'eccezione.
throwOnError
è true
e il tipo non è stato trovato.
-oppure-
throwOnError
è true
e typeName
contiene caratteri non validi, ad esempio una scheda incorporata.
-oppure-
throwOnError
è true
e typeName
è una stringa vuota.
-oppure-
throwOnError
è true
e typeName
rappresenta un tipo di matrice con una dimensione non valida.
-oppure-
typeName
rappresenta una matrice di TypedReference.
Si verifica un errore quando typeName
viene analizzato in un nome di tipo e un nome di assembly (ad esempio, quando il nome di tipo semplice include un carattere speciale senza escape).
-oppure-
throwOnError
è true
e typeName
contiene sintassi non valida (ad esempio, "MyType[,*,]").
-oppure-
typeName
rappresenta un tipo generico che ha un tipo di puntatore, un tipo ByRef
o Void tra i relativi argomenti di tipo.
-oppure-
typeName
rappresenta un tipo generico che ha un numero errato di argomenti di tipo.
-oppure-
typeName
rappresenta un tipo generico e uno dei relativi argomenti di tipo non soddisfa i vincoli per il parametro di tipo corrispondente.
throwOnError
è true
e l'assembly o una delle sue dipendenze non è stato trovato.
-oppure-
typeName
contiene un nome di assembly non valido.
-oppure-
typeName
è un nome di assembly valido senza un nome di tipo.
L'assembly o una delle relative dipendenze è stato trovato, ma non può essere caricato.
L'assembly o una delle relative dipendenze non è valida per il runtime attualmente caricato.
Commenti
Gli scenari di utilizzo per questo metodo e i dettagli sui assemblyResolver
parametri e typeResolver
sono disponibili nell'overload del GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) metodo.
La chiamata di questo overload del metodo è uguale a quella di chiamare l'overload del GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) metodo e specificare false
per il ignoreCase
parametro.