Questa documentazione è stata archiviata e non viene gestita.

Classe Type

Aggiornamento: novembre 2007

Rappresenta dichiarazioni di tipo: tipi classe, tipi interfaccia, tipi matrice, tipi di valore e di enumerazione, parametri di tipo, definizioni di tipo generico e tipi generici costruiti chiusi o aperti.

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

[SerializableAttribute]
[ComVisibleAttribute(true)]
[ClassInterfaceAttribute(ClassInterfaceType.None)]
public abstract class Type : MemberInfo, 
	_Type, IReflect
/** @attribute SerializableAttribute */ 
/** @attribute ComVisibleAttribute(true) */
/** @attribute ClassInterfaceAttribute(ClassInterfaceType.None) */
public abstract class Type extends MemberInfo implements _Type, 
	IReflect
public abstract class Type extends MemberInfo implements _Type, IReflect

Type è la radice della funzionalità dello spazio dei nomi System.Reflection e rappresenta il modo principale per accedere ai metadati. Utilizzare i membri di Type per ottenere informazioni su una dichiarazione del tipo, come i costruttori, i metodi, i campi, le proprietà e gli eventi di una classe, oltre al modulo e all'assembly in cui la classe è distribuita.

L'operatore typeof di C# (GetType in Visual Basic, typeid in Visual C++) restituisce un oggetto Type.

Un oggetto Type che rappresenta un tipo è univoco: due riferimenti a un oggetto Type fanno riferimento allo stesso oggetto solo se rappresentano lo stesso tipo. In questo modo, è possibile eseguire il confronto di oggetti Type utilizzando l'uguaglianza dei riferimenti.

Senza l'oggetto ReflectionPermission, al codice è consentito l'accesso solo ai membri pubblici degli assembly caricati. Tale condizione comprende, pur senza limitarsi a questo, l'accesso senza restrizioni al metodo Object.GetType, l'accesso ai tipi pubblici esportati tramite il metodo Type.GetType e l'accesso al metodo GetTypeFromHandle. Ad alcune proprietà di Type, quali FullName e Attributes è possibile accedere senza ReflectionPermission.

Type è una classe base astratta che consente più implementazioni. Verrà sempre fornito il RuntimeType della classe derivata. Nella reflection tutte le classi che iniziano con la parola Runtime sono create una sola volta per ogni oggetto nel sistema e supportano operazioni di confronto.

42892f65.alert_note(it-it,VS.90).gifNota:

Negli scenari multithreading, non bloccare oggetti Type per sincronizzare l'accesso a dati static. Anche altro tipo di codice, su cui non si ha controllo, potrebbe comportare il blocco del tipo della classe. La conseguenza diretta potrebbe essere un deadlock. Sincronizzare invece l'accesso a dati statici bloccando un oggetto static privato.

Si tratta di una classe thread-safe. Più thread possono eseguire contemporaneamente la lettura di un'istanza di questo tipo. Un'istanza di Type può rappresentare uno qualsiasi dei seguenti tipi:

  • Classi

  • Tipi di valore

  • Matrici

  • Interfacce

  • Puntatori

  • Enumerazioni

  • Tipi generici costruiti e definizioni di tipo generico

  • Argomenti e parametri di tipo di tipi generici costruiti, definizioni di tipo generico e definizioni di metodo generico

È possibile ottenere un riferimento all'oggetto Type associato a un tipo nei modi descritti di seguito.

  • Il metodo Object.GetType restituisce un oggetto Type che rappresenta il tipo di un'istanza.

  • Il metodo GetType statico restituisce un oggetto Type che rappresenta un tipo specificato con il nome completo.

  • I metodi Module.GetTypes, Module.GetType e Module.FindTypes restituiscono oggetti Type che rappresentano i tipi definiti in un modulo. Il primo metodo può essere utilizzato per ottenere una matrice di oggetti Type per tutti i tipi pubblici e privati definiti in un modulo. Per ottenere un'istanza di Module è possibile utilizzare il metodo Assembly.GetModule o Assembly.GetModules oppure la proprietà Type.Module.

  • Il metodo FindInterfaces restituisce un elenco filtrato dei tipi di interfaccia supportati da un tipo.

  • Il metodo GetElementType restituisce un oggetto Type che rappresenta l'elemento.

  • I metodi GetInterfaces e GetInterface restituiscono oggetti Type che rappresentano i tipi di interfaccia supportati da un tipo.

  • Il metodo GetTypeArray restituisce una matrice di oggetti Type che rappresentano i tipi specificati da un insieme arbitrario di oggetti. Gli oggetti sono specificati con una matrice di tipo Object.

  • I metodi GetTypeFromProgID e GetTypeFromCLSID sono forniti per l'interoperabilità COM. Restituiscono un oggetto Type che rappresenta il tipo specificato da un ProgID o CLSID.

  • Il metodo GetTypeFromHandle viene fornito per l'interoperabilità. Restituisce un oggetto Type che rappresenta il tipo specificato da un handle della classe.

  • L'operatore typeof C#, l'operatore typeid C++ e l'operatore GetType Visual Basic ottengono l'oggetto Type per un tipo.

  • Il metodo MakeGenericType restituisce un oggetto Type che rappresenta un tipo generico costruito, ovvero un tipo costruito aperto se la relativa proprietà ContainsGenericParameters restituisce true e un tipo costruito chiuso in caso contrario. È possibile creare un'istanza di un tipo generico soltanto se si tratta di un tipo generico chiuso.

  • I metodi MakeArrayType, MakePointerType e MakeByRefType restituiscono oggetti Type che rappresentano rispettivamente una matrice di un tipo specificato, un puntatore a un tipo specificato e il tipo di un parametro di riferimento (ref in C#, ByRef in Visual Basic).

42892f65.alert_note(it-it,VS.90).gifNota:

Una classe derivata può accedere ai membri protetti delle classi base del codice chiamante. Inoltre, l'accesso è consentito ai membri a livello di assembly dell'assembly del codice chiamante. In genere, se viene consentito l'accesso al codice ad associazione anticipata, viene consentito anche al codice ad associazione tardiva.

42892f65.alert_note(it-it,VS.90).gifNota:

Le interfacce che estendono altre interfacce non ereditano i metodi definiti nelle interfacce estese.

Note per gli eredi:

Quando si eredita da Type, è necessario sottoporre a override i seguenti membri: GUID, InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[]), Module, Assembly, TypeHandle, FullName, Namespace, AssemblyQualifiedName, BaseType, GetConstructorImpl, GetConstructors(BindingFlags), GetMethodImpl, GetMethods(BindingFlags), GetField(String, BindingFlags), GetFields(BindingFlags), GetInterface(String, Boolean), GetInterfaces(), GetEvent(String, BindingFlags), GetEvents(BindingFlags), GetPropertyImpl, GetProperties(BindingFlags), GetNestedType(String, BindingFlags), GetNestedTypes(BindingFlags), GetAttributeFlagsImpl, IsArrayImpl, IsByRefImpl, IsPointerImpl, IsPrimitiveImpl, IsCOMObjectImpl, GetElementType(), HasElementTypeImpl, UnderlyingSystemType, MemberInfo.Name, MemberInfo.IsDefined, MemberInfo.GetCustomAttributes(Boolean) e GetCustomAttributes.

Nell'esempio di codice riportato di seguito vengono illustrate alcune funzionalità rappresentative dell'oggetto Type. L'operatore typeof di C# (GetType in Visual Basic, typeid in Visual C++) viene utilizzato per ottenere un oggetto Type che rappresenta l'oggetto String. Da questo oggetto Type, viene utilizzato il metodo GetMethod per ottenere un oggetto MethodInfo che rappresenta l'overload Substring che accetta una posizione di inizio e una lunghezza.

Per identificare la firma dell'overload, nell'esempio di codice viene creata una matrice temporanea contenente due oggetti Type che rappresentano int (Integer in Visual Basic).

42892f65.alert_note(it-it,VS.90).gifNota:

Per la precisione, la matrice contiene due riferimenti all'istanza dell'oggetto Type che rappresenta int nel dominio applicazione corrente. Per qualsiasi tipo è presente solo un'unica istanza dell'oggetto Type per ciascun dominio applicazione.

Nell'esempio di codice viene utilizzato l'oggetto MethodInfo per richiamare il metodo Substring sulla stringa "Hello, World!" e viene visualizzato il risultato.

using System;
using System.Reflection;

class Example
{
    static void Main()
    {
        Type t = typeof(String);

        MethodInfo substr = t.GetMethod("Substring", 
            new Type[] { typeof(int), typeof(int) });

        Object result = 
            substr.Invoke("Hello, World!", new Object[] { 7, 5 });
        Console.WriteLine("{0} returned \"{1}\".", substr, result);
    }
}

/* This code example produces the following output:

System.String Substring(Int32, Int32) returned "World".
 */


Questo tipo è thread-safe.

Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition , Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Windows CE, Windows Mobile per Smartphone, Windows Mobile per Pocket PC, Xbox 360

.NET Framework e .NET Compact Framework non supportano tutte le versioni di ciascuna piattaforma. Per un elenco delle versioni supportate, vedere Requisiti di sistema di .NET Framework.

.NET Framework

Supportato in: 3.5, 3.0, 2.0, 1.1, 1.0

.NET Compact Framework

Supportato in: 3.5, 2.0, 1.0

XNA Framework

Supportato in: 2.0, 1.0
Mostra: