(0) exportieren Drucken
Alle erweitern

Type-Klasse

Aktualisiert: November 2007

Stellt Typdeklarationen dar: Klassentypen, Schnittstellentypen, Arraytypen, Werttypen, Enumerationstypen, Typparameter, generische Typdefinitionen und offen oder geschlossen konstruierte generische Typen.

Namespace:  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 bildet die Basis für die System.Reflection-Funktionalität und das Hauptverfahren für den Zugriff auf Metadaten. Über die Member von Type können Sie Informationen über die Typdeklaration abrufen, z. B. über Konstruktoren, Methoden, Felder, Eigenschaften und Ereignisse einer Klasse sowie über das Modul und die Assembly, in der die Klasse bereitgestellt wird.

Der Operator typeof in C# (Operator GetType in Visual Basic, Operator typeid in Visual C++) gibt ein Type-Objekt zurück.

Ein Type-Objekt, das einen Typ darstellt, ist eindeutig, d. h. zwei Type-Objektverweise verweisen dann nur dann auf dasselbe Objekt, wenn sie denselben Typ darstellen. Dies ermöglicht den Vergleich von Type-Objekten mithilfe der Verweisgleichheit.

Ohne ReflectionPermission kann Code nur auf die öffentlichen Member geladener Assemblys zugreifen. Der Zugriff umfasst u. a. uneingeschränkten Zugriff auf Object.GetType, Zugriff auf öffentliche, exportierte Typen durch Type.GetType und Zugriff auf GetTypeFromHandle. Auf einige Eigenschaften von Type, z. B. FullName und Attributes, kann ohne ReflectionPermission zugegriffen werden.

Type ist eine abstrakte Basisklasse, die mehrere Implementierungen zulässt. Das System stellt immer die abgeleitete Klasse RuntimeType bereit. In der Reflektion werden alle Klassen, die mit dem Wort Runtime beginnen, einmal für jedes Objekt im System mit Unterstützung für Vergleichsvorgängen erstellt.

42892f65.alert_note(de-de,VS.90).gifHinweis:

Sperren Sie beim Einsatz von Multithreading keine Type-Objekte, um den Zugriff auf static-Daten zu synchronisieren. Anderer Code, auf den Sie keinen Einfluss haben, kann den Klassentyp ebenfalls sperren. Dies kann zu einem Deadlock führen. Synchronisieren Sie den Zugriff auf statische Daten stattdessen durch das Sperren eines privaten static-Objekts.

Diese Klasse ist threadsicher: Mehrere Threads können eine Instanz dieses Typs gleichzeitig lesen. Eine Instanz von Type kann jeden der folgenden Typen darstellen:

  • Klassen

  • Werttypen

  • Arrays

  • Schnittstellen

  • Zeiger

  • Enumerationen

  • Konstruierte generische Typen und generische Typdefinitionen

  • Typargumente und Typparameter von konstruierten generischen Typen, generischen Typdefinitionen und generischen Methodendefinitionen

Ein Verweis auf das einem Typ zugeordnete Type-Objekt kann auf eine der folgenden Arten erstellt werden:

  • Die Object.GetType-Methode gibt ein Type-Objekt zurück, das den Typ einer Instanz darstellt.

  • Die statische GetType-Methode gibt ein Type-Objekt zurück, das einen über seinen voll gekennzeichneten Namen angegebenen Typ darstellt.

  • Die Module.GetTypes-Methode, die Module.GetType-Methode und die Module.FindTypes-Methode geben Type-Objekte zurück, die die in einem Modul definierten Typen darstellen. Mit einem Aufruf der ersten Methode rufen Sie ein Array von Type-Objekten für alle in einem Modul definierten öffentlichen und privaten Typen ab. (Eine Instanz von Module kann über die Assembly.GetModule-Methode, die Assembly.GetModules-Methode oder die Type.Module-Eigenschaft abgerufen werden.)

  • Die FindInterfaces-Methode gibt eine gefilterte Liste der von einem Typ unterstützten Schnittstellentypen zurück.

  • Die GetElementType-Methode gibt ein Type-Objekt zurück, das das Element darstellt.

  • Die GetInterfaces-Methode und die GetInterface-Methode geben Type-Objekte zurück, die die von einem Typ unterstützten Schnittstellentypen darstellen.

  • Die GetTypeArray-Methode gibt ein Array von Type-Objekten zurück, die die Typen darstellen, die durch eine beliebigen Gruppe von Objekten angegeben sind. Die Objekte werden durch ein Array vom Object-Typ angegeben.

  • Die GetTypeFromProgID-Methode und die GetTypeFromCLSID-Methode werden für die COM-Interoperabilität bereitgestellt. Sie geben ein Type-Objekt zurück, das den durch eine ProgID oder eine CLSID angegebenen Typ darstellt.

  • Die GetTypeFromHandle-Methode wird für die Interoperabilität bereitgestellt. Sie gibt ein Type-Objekt zurück, das den durch ein Klassenhandle angegebenen Typ darstellt.

  • Mit dem Operator typeof in C#, dem Operator typeid in C++ und dem Operator GetType in Visual Basic rufen Sie das Type-Objekt für einen Typ ab.

  • Die MakeGenericType-Methode gibt ein Type-Objekt zurück, das einen konstruierten generischen Typ darstellt. Dieser Typ ist ein offen konstruierter Typ, wenn seine ContainsGenericParameters-Eigenschaft true zurückgibt, andernfalls ein geschlossen konstruierter Typ. Ein generischer Typ kann nur instanziiert werden, wenn er geschlossen ist.

  • Die Methoden MakeArrayType, MakePointerType und MakeByRefType geben Type-Objekte zurück, die ein Array eines angegebenen Typs, einen Zeiger auf einen angegebenen Typ bzw. den Typ eines Verweisparameters (ref in C#, ByRef in Visual Basic) darstellen.

42892f65.alert_note(de-de,VS.90).gifHinweis:

Eine abgeleitete Klasse kann auf geschützte Member der Basisklassen des aufrufenden Codes zugreifen. Der Zugriff auf Assemblymember der Assembly des aufrufenden Codes ist ebenfalls zulässig. Wenn ein Zugriff in früh gebundenem Code zulässig ist, ist er grundsätzlich auch in spät gebundenem Code zulässig.

42892f65.alert_note(de-de,VS.90).gifHinweis:

Schnittstellen, die andere Schnittstellen erweitern, erben die in den erweiterten Schnittstellen definierten Methoden nicht.

Hinweise zur Vererbung:

Wenn Sie Type vererben, müssen Sie die folgenden Member überschreiben: 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) und GetCustomAttributes.

Im folgenden Codebeispiel werden einige kennzeichnende Features von Type veranschaulicht. Der Operator typeof in C# (Operator GetType in Visual Basic, Operator typeid in Visual C++) wird verwendet, um ein Type-Objekt zurückzugeben, das einen String darstellt. Mit der GetMethod-Methode dieses Type-Objekts kann eine MethodInfo abgerufen werden, die die Substring-Überladung darstellt, an die eine Anfangsposition und eine Länge übergeben werden können.

Zur Identifikation der Überladungssignatur wird im Codebeispiel ein temporäres Array mit zwei Type-Objekten erstellt, die int (Integer in Visual Basic) darstellen.

42892f65.alert_note(de-de,VS.90).gifHinweis:

Genauer gesagt, enthält das Array zwei Verweise auf die Instanz von Type, die int in der aktuellen Anwendungsdomäne darstellt. Für jeden Typ ist jeweils nur eine Instanz von Type pro Anwendungsdomäne vorhanden.

Im Codebeispiel wird MethodInfo verwendet, um die Substring-Methode mit der Zeichenfolge "Hello, World!" aufzurufen. Anschließend wird das Ergebnis angezeigt.

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".
 */


Dieser Typ ist threadsicher.

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 für Smartphone, Windows Mobile für Pocket PC, Xbox 360

.NET Framework und .NET Compact Framework unterstützen nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.

.NET Framework

Unterstützt in: 3.5, 3.0, 2.0, 1.1, 1.0

.NET Compact Framework

Unterstützt in: 3.5, 2.0, 1.0

XNA Framework

Unterstützt in: 2.0, 1.0

Community-Beiträge

HINZUFÜGEN
Anzeigen:
© 2014 Microsoft