Type.GetGenericTypeDefinition Methode

Definitie

Retourneert een Type object dat een algemene typedefinitie vertegenwoordigt waaruit het huidige algemene type kan worden samengesteld.

public:
 abstract Type ^ GetGenericTypeDefinition();
public:
 virtual Type ^ GetGenericTypeDefinition();
public abstract Type GetGenericTypeDefinition();
public virtual Type GetGenericTypeDefinition();
abstract member GetGenericTypeDefinition : unit -> Type
abstract member GetGenericTypeDefinition : unit -> Type
override this.GetGenericTypeDefinition : unit -> Type
Public MustOverride Function GetGenericTypeDefinition () As Type
Public Overridable Function GetGenericTypeDefinition () As Type

Retouren

Een Type object dat een algemeen type aangeeft waaruit het huidige type kan worden samengesteld.

Uitzonderingen

Het huidige type is geen algemeen type. Dat wil gezegd, IsGenericType retourneert false.

De aangeroepen methode wordt niet ondersteund in de basisklasse. Afgeleide klassen moeten een implementatie bieden.

Voorbeelden

In het volgende codevoorbeeld wordt een exemplaar van een samengesteld type gemaakt met behulp van het maken van gewone exemplaren. Vervolgens worden de GetType en GetGenericTypeDefinition methoden gebruikt om het samengestelde type en de algemene typedefinitie op te halen. In dit voorbeeld wordt het algemene Dictionary<TKey,TValue> type gebruikt. Het samengestelde type vertegenwoordigt een Dictionary<TKey,TValue> van Test objecten met tekenreekssleutels.

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
 */
open System
open System.Collections.Generic

type Test() = class end

let displayTypeInfo (t: Type) =
    printfn $"\n{t}"
    printfn $"\tIs this a generic type definition? {t.IsGenericTypeDefinition}"
    printfn $"\tIs it a generic type? {t.IsGenericType}"
    let typeArguments = t.GetGenericArguments()
    printfn $"\tList type arguments ({typeArguments.Length}):"
    for tParam in typeArguments do
        printfn $"\t\t{tParam}"

printfn "\n--- Get the generic type that defines a constructed type."

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

// Get a Type object representing the constructed type.
let constructed = d.GetType()
displayTypeInfo constructed

let generic = constructed.GetGenericTypeDefinition()
displayTypeInfo generic


(* 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
 *)
Imports System.Reflection
Imports System.Collections.Generic

Public Class Test
    Public Shared Sub Main() 
        Console.WriteLine(vbCrLf & "--- Get the generic type that defines a constructed type.")
        
        ' Create a Dictionary of Test objects, using strings for the
        ' keys.
        Dim d As New Dictionary(Of String, Test)
        
        ' Get a Type object representing the constructed type.
        '
        Dim constructed As Type = d.GetType()
        DisplayTypeInfo(constructed)
        
        Dim generic As Type = constructed.GetGenericTypeDefinition()
        DisplayTypeInfo(generic)
    End Sub
    
    Private Shared Sub DisplayTypeInfo(ByVal t As Type) 
        Console.WriteLine(vbCrLf & t.ToString())
        Console.WriteLine(vbTab & "Is this a generic type definition? " _
            & t.IsGenericTypeDefinition)
        Console.WriteLine(vbTab & "Is it a generic type? " _
            & t.IsGenericType)
        Dim typeArguments As Type() = t.GetGenericArguments()
        Console.WriteLine(vbTab & "List type arguments (" _
            & typeArguments.Length & "):")
        For Each tParam As Type In typeArguments
            Console.WriteLine(vbTab & vbTab & tParam.ToString())
        Next tParam
    End Sub
End Class

' 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
'

Opmerkingen

Een algemene typedefinitie is een sjabloon waaruit andere typen kunnen worden samengesteld. U kunt bijvoorbeeld vanuit de algemene typedefinitie G<T>van C# het type G<int>maken en instantiëren. Op basis van een Type object dat dit samengestelde type vertegenwoordigt, retourneert de GetGenericTypeDefinition methode de algemene typedefinitie.

Als twee samengestelde typen worden gemaakt op basis van dezelfde algemene typedefinitie, met dezelfde typeargumenten, retourneert de GetGenericTypeDefinition methode hetzelfde Type object voor beide typen.

Als u de GetGenericTypeDefinition methode aanroept voor een Type object dat al een algemene typedefinitie vertegenwoordigt, wordt de huidige Typewaarde geretourneerd.

Important

Een matrix met algemene typen is niet zelf algemeen. In de C#-code A<int>[] v; of de Visual Basic-code Dim v() As A(Of Integer) is het type variabele v niet algemeen. Gebruik IsGenericType dit om te bepalen of een type algemeen is voordat u aanroept GetGenericTypeDefinition.

Zie de opmerkingen van de IsGenericType eigenschap voor een lijst met invariante voorwaarden voor termen die in generieke reflectie worden gebruikt.

Van toepassing op

Zie ook