Questo articolo è stato tradotto automaticamente. Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

Metodo Type.GetType (String, Boolean, Boolean)

 

Data di pubblicazione: ottobre 2016

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.

Spazio dei nomi:   System
Assembly:  mscorlib (in mscorlib.dll)

public static Type GetType(
	string typeName,
	bool throwOnError,
	bool ignoreCase
)

Parametri

typeName
Type: System.String

Nome qualificato dall'assembly del tipo da ottenere. Vedere AssemblyQualifiedName. Se il tipo è incluso nell'assembly attualmente in esecuzione o in Mscorlib.dll, è sufficiente specificare il nome del tipo qualificato in base al relativo spazio dei nomi.

throwOnError
Type: System.Boolean

true per generare un'eccezione se il tipo non viene trovato. false per restituire null. Specificando false inoltre si eliminano alcune condizioni dell'eccezione, ma non tutte. Vedere la sezione relativa alle eccezioni.

ignoreCase
Type: System.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.

Valore restituito

Type: System.Type

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.

Exception Condition
ArgumentNullException

typeName è null.

TargetInvocationException

Viene richiamato un inizializzatore di classi e viene generata un'eccezione.

TypeLoadException

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.

ArgumentException

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.

FileNotFoundException

throwOnError è true e l'assembly o una delle sue dipendenze non è stato trovato.

FileLoadException

L'assembly o una delle relative dipendenze è stato trovato, ma non può essere caricato.

BadImageFormatException

L'assembly o una delle relative dipendenze non è valido.

-oppure-

Attualmente è caricata la versione 2.0 o successiva di Common Language Runtime e l'assembly è stato compilato con una versione successiva.

È possibile utilizzare il GetType per ottenere un Type dell'oggetto per un tipo in un altro assembly, se si conosce il nome completo dello spazio dei nomi. GetTypecausa il caricamento dell'assembly specificato in typeName. È inoltre possibile caricare un assembly mediante il Load(metodo) e quindi utilizzare il GetType o GetTypes metodi del Assembly classe per ottenere Type oggetti. Se un tipo in un assembly noto al programma in fase di compilazione, è preferibile utilizzare typeof in c#, GetType in Visual Basic o typeid in C++.

GetTypefunziona solo su assembly caricati dal disco. Se si chiama GetType per cercare un tipo definito in un assembly dinamico mediante il System.Reflection.Emit services, è possibile ottenere un comportamento incoerente. Il comportamento varia a seconda che l'assembly dinamico persistente, vale a dire, creata utilizzando il RunAndSave o Save modalità di accesso di System.Reflection.Emit.AssemblyBuilderAccess enumerazione. Se l'assembly dinamico è permanente ed è stato scritto su disco prima GetType viene chiamato, il caricatore trova l'assembly salvato su disco, carica l'assembly e recupera il tipo di tale assembly. Se l'assembly non è stato salvato su disco quando GetType viene chiamato il metodo restituisce null. GetTypenon riconosce gli assembly dinamici temporanei; Pertanto, la chiamata GetType per recuperare un tipo di un temporaneo restituisce l'assembly dinamico null.

Per utilizzare GetType su un modulo dinamico, sottoscrivere il AppDomain.AssemblyResolve eventi e chiamate GetType prima del salvataggio. In caso contrario, si otterrà due copie dell'assembly in memoria.

Il throwOnError parametro specifica che cosa avviene quando non viene trovato, il tipo e vengono eliminate alcune condizioni di eccezione, come descritto nella sezione eccezioni. Alcune eccezioni vengono generate indipendentemente dal valore di throwOnError. Se il tipo è stato trovato ma non può essere caricato, ad esempio un TypeLoadException viene generata anche se throwOnError è false.

La tabella seguente mostra quali vengono restituiti dai membri di una classe di base di Get metodi durante la reflection su un tipo.

Tipo di membro

Statico

Non statico

Costruttore

No

No

Campo

No

Sì. Un campo è sempre Nascondi in base al nome e-firma.

Evento

Non applicabile

La regola di sistema di tipo comune è che l'ereditarietà è uguale a quello dei metodi che implementa la proprietà. La reflection gestisce proprietà come Nascondi in base al nome e-firma. Vedere la nota 2 di seguito.

Metodo

No

Sì. Un metodo (virtuale e non virtuale) può essere hide-by-name o Nascondi in base al nome e-firma.

Tipo annidato

No

No

Proprietà

Non applicabile

La regola di sistema di tipo comune è che l'ereditarietà è uguale a quello dei metodi che implementa la proprietà. La reflection gestisce proprietà come Nascondi in base al nome e-firma. Vedere la nota 2 di seguito.

  1. Nascondi in base al nome e-firma prende in considerazione tutte le parti della firma, compresi i modificatori personalizzati, restituire tipi, tipi di parametri, elementi sentinel e convenzioni di chiamata non gestite. Si tratta di un confronto binario.

  2. Per la reflection, proprietà ed eventi sono Nascondi in base al nome e-firma. Se si dispone di una proprietà con sia un'operazione get e set nella classe base, ma la classe derivata contiene solo una funzione di accesso get, la proprietà della classe derivata nasconde la proprietà di classe di base e non sarà in grado di accedere il setter sulla classe di base.

  3. Attributi personalizzati non fanno parte di common type system.

Le matrici o tipi COM non vengono cercati a meno che non sono già stati caricati nella tabella delle classi disponibili.

typeNamepuò essere il nome del tipo qualificato dal relativo spazio dei nomi o un nome completo dell'assembly che include una specifica di nome di assembly. Vedere AssemblyQualifiedName.

Se typeName include lo spazio dei nomi ma non il nome dell'assembly, questo metodo cerca solo assembly dell'oggetto chiamante e mscorlib. dll, nell'ordine. Se typeName è un nome completo con il nome parziale o completo dell'assembly, questo metodo cerca nell'assembly specificato. Se l'assembly dispone di un nome sicuro, è necessario un nome di assembly completo.

Il AssemblyQualifiedName proprietà restituisce un nome completo del tipo, inclusi i tipi annidati, il nome dell'assembly e gli argomenti di tipo. Tutti i compilatori che supportano common language runtime creeranno il nome semplice di una classe annidata, e reflection quando richiesta, in conformità con le seguenti convenzioni di un nome alterato.

System_CAPS_noteNota

In .NET Framework versione 2.0, l'architettura del processore viene aggiunto all'identità dell'assembly e può essere specificato come parte di stringhe di nomi di assembly. Ad esempio, "ProcessorArchitecture = msil". Tuttavia, non è incluso nella stringa restituita dal AssemblyQualifiedName proprietà, per motivi di compatibilità. È inoltre possibile caricare tipi creando un AssemblyName oggetto e passarlo a un overload appropriato del Load metodo. È quindi possibile utilizzare il Assembly.GetType per caricare i tipi dall'assembly. Vedere anche AssemblyName.ProcessorArchitecture.

Delimitatore

Significato

Barra rovesciata (\)

Carattere di escape.

Apice inverso (')

Precede una o più cifre che rappresenta il numero di parametri di tipo, 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, 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 annidata.

Il nome completo per una classe, ad esempio, potrebbe essere simile al seguente:

TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly

Se lo spazio dei nomi TopNamespace.Sub+Namespace, quindi la stringa dovrebbe essere preceduto sul segno più (+) con un carattere di escape (\) per evitare che venga interpretato come un separatore di annidamento. Reflection genera questa stringa, come indicato di seguito:

TopNamespace.Sub\+Namespace.ContainingClass+NestedClass,MyAssembly

A "+" diventa "\ + \ +" e un "\" diventa "\ \".

Questo nome completo può essere persistente e successivamente utilizzato per caricare il Type. Per cercare e caricare un Type, utilizzare GetType o con il tipo di nome solo oppure con il nome di tipo completo dell'assembly. GetTypecon il tipo di nome solo cercherà il Type nell'assembly del chiamante, quindi nell'assembly System. GetTypecon l'assembly completo del tipo cercherà il Type 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 caratteri finali, utilizzare t.GetElementType().ToString(), dove t è il tipo.

Gli spazi sono rilevanti in tutti i componenti di nome di tipo tranne il nome dell'assembly. Il nome di assembly, spazi che precedono il separatore ',' sono rilevanti, ma gli spazi dopo il separatore ',' vengono ignorati.

Il nome di un tipo generico termina con un apice inverso (') seguito da cifre che rappresenta il numero di argomenti di tipo generico. Lo scopo di questo tipo di modifica dei nomi è consentire ai compilatori di supportare i tipi generici con lo stesso nome ma con un numero diverso di parametri di tipo, che si verificano nello stesso ambito. Ad esempio, la reflection restituisce i nomi alterati Tuple`1 e Tuple`2 uno dei metodi generici Tuple(Of T) e Tuple(Of T0, T1) in Visual Basic o Tuple<T> tupla e<T0, T1> in Visual c#.

Per i tipi generici, l'elenco di argomenti di tipo è racchiuso tra parentesi e gli argomenti di tipo sono separati da virgole. Ad esempio, un oggetto generico Dictionary<TKey, TValue> presenta due parametri di tipo. Oggetto Dictionary<TKey, TValue> di MyType con chiavi di tipo String potrebbe essere rappresentato nel modo seguente:

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

Per specificare un tipo qualificato dall'assembly all'interno di un elenco di argomenti, racchiudere il tipo completo dell'assembly all'interno di parentesi quadre. In caso contrario, le virgole per separare le parti del nome completo dell'assembly vengono interpretate come delimitatori ulteriori argomenti di tipo. Ad esempio, un Dictionary<TKey, TValue> di MyType da MyAssembly. dll, con chiavi di tipo String, può essere specificato come indicato di seguito:

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

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 i tipi completi e non qualificati in elenchi di parametri di tipo sono come le regole per i tipi non generici non qualificati e completi.

Tipi nullable sono un tipo speciale di tipi generici. Ad esempio, un valore nullable Int32 è rappresentato dalla stringa "System.Nullable'1[System.Int32]".

System_CAPS_noteNota

In c#, C++ e Visual Basic è inoltre possibile ottenere i tipi nullable che utilizzano operatori di tipo. Ad esempio, il valore nullable Boolean tipo restituito dal typeof(Nullable<bool>) in c#, da Nullable<Boolean>::typeid in C++ e da GetType(Nullable(Of Boolean)) in Visual Basic.

La tabella seguente illustra la sintassi da utilizzare con GetType per vari tipi.

Per ottenere

Usare

Un valore nullableInt32

Type.GetType("System.Nullable`1[System.Int32]")

Un puntatore non gestito aMyType

Type.GetType("MyType*")

Un puntatore non gestito a un puntatore aMyType

Type.GetType("MyType**")

Un puntatore gestito o un riferimento aMyType

Type.GetType("MyType&"). Si noti che, a differenza dei puntatori, riferimenti sono limitati a un livello.

Una classe padre e una classe annidata

Type.GetType("MyParentClass+MyNestedClass")

Una matrice unidimensionale con limite inferiore pari a 0

Type.GetType("MyArray[]")

Una matrice unidimensionale con limite inferiore sconosciuto

Type.GetType("MyArray[*]")

Una matrice di n-dimensionale

Una virgola (,) all'interno delle parentesi un totale di volte in cui n-1. Ad esempio, System.Object[,,] rappresenta un oggetto tridimensionale Object matrice.

Una matrice bidimensionale

Type.GetType("MyArray[][]")

Una matrice bidimensionale rettangolare con limiti inferiori sconosciuti

Type.GetType("MyArray[,]")

Un tipo generico con un argomento di tipo

Type.GetType("MyGenericType`1[MyType]")

Un tipo generico con due argomenti di tipo

Type.GetType("MyGenericType`2[MyType,AnotherType]")

Un tipo generico con due argomenti di tipo qualificato dall'assembly

Type.GetType("MyGenericType`2[[MyType,MyAssembly],[AnotherType,AnotherAssembly]]")

Un tipo generico con un argomento di tipo qualificato dall'assembly completo dell'assembly

Type.GetType("MyGenericType`1[[MyType,MyAssembly]],MyGenericTypeAssembly")

Un tipo generico il cui argomento di tipo è un tipo generico con due argomenti di tipo

Type.GetType("MyGenericType`1[AnotherGenericType`2[MyType,AnotherType]]")

Universal Windows Platform
Disponibile da 10
.NET Framework
Disponibile da 1.1
Silverlight
Disponibile da 2.0
Windows Phone Silverlight
Disponibile da 7.0
Torna all'inizio
Mostra: