Exporter (0) Imprimer
Développer tout
Développer Réduire

Type.GetGenericTypeDefinition, méthode

Retourne un objet Type qui représente une définition de type générique à partir de laquelle le type générique actuel peut être construit.

Espace de noms: System
Assembly : mscorlib (dans mscorlib.dll)

public virtual Type GetGenericTypeDefinition ()
public Type GetGenericTypeDefinition ()
public function GetGenericTypeDefinition () : Type
Non applicable.

Valeur de retour

Objet Type représentant un type générique à partir duquel le type actuel peut être construit.

Type d'exceptionCondition

InvalidOperationException

Le type actuel n'est pas un type générique. En d'autres termes, IsGenericType retourne la valeur false.

NotSupportedException

La méthode appelée n'est pas prise en charge dans la classe de base. Les classes dérivées doivent fournir une implémentation.

Une définition de type générique est un modèle à partir duquel d'autres types peuvent être construits. Par exemple, à partir de la définition de type générique G<T> (exprimée dans la syntaxe C# ; G(Of T) en Visual Basic ou generic <typename T> ref class G en C++) vous pouvez construire et instancier le type G<int> (G(Of Integer) en Visual Basic). À partir de l'objet Type qui représente ce type construit, la méthode GetGenericTypeDefinition retourne la définition de type générique.

Si deux types construits sont créés à partir de la même définition de type générique, à l'aide des mêmes arguments de type, la méthode GetGenericTypeDefinition retourne le même objet Type pour les deux types.

Si vous appelez la méthode GetGenericTypeDefinition sur un objet Type qui représente déjà une définition de type générique, elle retourne le Type actuel.

RemarqueImportant :

Un tableau de types génériques n'est pas lui-même générique. Dans le A<int>[] v; du code C# ou le Dim v() As A(Of Integer) du code Visual Basic, le type de la variable v n'est pas générique. Utilisez IsGenericType pour déterminer si un type est générique avant d'appeler GetGenericTypeDefinition.

Pour obtenir la liste des conditions invariables des termes utilisés dans une réflexion générique, consultez les notes sur la propriété IsGenericType.

L'exemple de code suivant crée une instance d'un type construit en utilisant la création d'instance ordinaire, puis utilise les méthodes GetType et GetGenericTypeDefinition pour récupérer le type construit et la définition de type générique. Cet exemple utilise le type générique Dictionary ; le type construit représente un Dictionary des objets Test avec des clés de type chaîne.

using System;
using System.Reflection;
using System.Collections.Generic;

public class Test
{
    public static void Main()
    {
        Console.WriteLine("\r\n--- Get the generic type that defines a constructed type.");

        // Create a Dictionary of Test objects, using strings for the
        // keys.       
        Dictionary<string, Test> d = new Dictionary<string, Test>();

        // Get a Type object representing the constructed type.
        //
        Type constructed = d.GetType();
        DisplayTypeInfo(constructed);

        Type generic = constructed.GetGenericTypeDefinition();
        DisplayTypeInfo(generic);
    }

    private static void DisplayTypeInfo(Type t)
    {
        Console.WriteLine("\r\n{0}", t);
        Console.WriteLine("\tIs this a generic type definition? {0}", 
            t.IsGenericTypeDefinition);
        Console.WriteLine("\tIs it a generic type? {0}", 
            t.IsGenericType);
        Type[] typeArguments = t.GetGenericArguments();
        Console.WriteLine("\tList type arguments ({0}):", typeArguments.Length);
        foreach (Type tParam in typeArguments)
        {
            Console.WriteLine("\t\t{0}", tParam);
        }
    }
}

/* This example produces the following output:

--- Get the generic type that defines a constructed type.

System.Collections.Generic.Dictionary`2[System.String,Test]
        Is this a generic type definition? False
        Is it a generic type? True
        List type arguments (2):
                System.String
                Test

System.Collections.Generic.Dictionary`2[TKey,TValue]
        Is this a generic type definition? True
        Is it a generic type? True
        List type arguments (2):
                TKey
                TValue
 */

import System.*;
import System.Reflection.*;
import System.Collections.Generic.*;

public class Test
{
    public static void main(String[] args)
    {
        Console.WriteLine("\r\n--- Get the generic type that defines "
            + "a constructed type.");
        // Create a Dictionary of Test objects, using Strings for the
        // keys.       
        Dictionary<String,Test> d = new Dictionary<String,Test>();
        // Get a Type object representing the constructed type.
        //
        Type constructed = d.GetType();
        DisplayTypeInfo(constructed);

        Type generic = constructed.GetGenericTypeDefinition();
        DisplayTypeInfo(generic);
    } //main

    private static void DisplayTypeInfo(Type t)
    {
        Console.WriteLine("\r\n{0}", t);
        Console.WriteLine("\tIs this a generic type definition? {0}",
            (System.Boolean)t.get_IsGenericTypeDefinition());
        Console.WriteLine("\tIs it a generic type? {0}",
            (System.Boolean)t.get_IsGenericType());
        Type typeArguments[] = t.GetGenericArguments();
        Console.WriteLine("\tList type arguments ({0}):",
            (Int32)typeArguments.get_Length());
        for (int iCtr = 0; iCtr < typeArguments.get_Length(); iCtr++) {
            Type tParam = (Type)typeArguments.get_Item(iCtr);
            Console.WriteLine("\t\t{0}", tParam);
        }
    } //DisplayTypeInfo
} //Test

/* This example produces the following output:

--- Get the generic type that defines a constructed type.

System.Collections.Generic.Dictionary`2[System.String, Test]
        Is this a generic type definition? False
        Is it a generic type? True
        List type arguments (2):
                System.String
                Test

System.Collections.Generic.Dictionary`2[TKey,TValue]
        Is this a generic type definition? True
        Is it a generic type? True
        List type arguments (2):
                TKey
                TValue
 */

Windows 98, Windows Server 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile pour Pocket PC, Windows Mobile pour Smartphone, Windows Server 2003, Windows XP Édition Media Center, Windows XP Professionnel Édition x64, Windows XP SP2, Windows XP Starter Edition

Microsoft .NET Framework 3.0 est pris en charge sur Windows Vista, Microsoft Windows XP SP2 et Windows Server 2003 SP1.

.NET Framework

Prise en charge dans : 3.0, 2.0

.NET Compact Framework

Prise en charge dans : 2.0

XNA Framework

Prise en charge dans : 1.0

Ajouts de la communauté

AJOUTER
Afficher:
© 2015 Microsoft