Type.GetGenericTypeDefinition Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Retorna um objeto Type que representa uma definição de tipo genérico do qual o tipo genérico atual pode ser criado.
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
Retornos
Um objeto Type que representa um tipo genérico do qual o tipo atual pode ser criado.
Exceções
O tipo atual não é um tipo genérico. Ou seja, IsGenericType retorna false
.
O método chamado não é suportado na classe base. As classes derivadas devem fornecer uma implementação.
Exemplos
O exemplo de código a seguir cria uma instância de um tipo construído usando a criação de instância comum e, em seguida, usa os métodos e para recuperar o tipo construído e a GetType GetGenericTypeDefinition definição de tipo genérico. Este exemplo usa o tipo genérico; o tipo construído representa um de objetos Dictionary<TKey,TValue> com chaves de cadeia de Dictionary<TKey,TValue> Test
caracteres.
using namespace System;
using namespace System::Reflection;
using namespace System::Collections::Generic;
public ref class Test
{
public:
static void Main()
{
Console::Write( L"\r\n--- Get the generic type that " );
Console::WriteLine( L"defines a constructed type." );
// Create a Dictionary of Test objects, using strings for the
// keys.
Dictionary< String^,Test^ >^ d = gcnew Dictionary< String^,Test^ >;
// Get a Type object representing the constructed type.
//
Type^ constructed = d->GetType();
DisplayTypeInfo( constructed );
Type^ myGeneric = constructed->GetGenericTypeDefinition();
DisplayTypeInfo( myGeneric );
}
private:
static void DisplayTypeInfo( Type^ t )
{
Console::WriteLine( L"\r\n{0}", t );
Console::WriteLine( L"\tIs this a generic type definition? {0}",
t->IsGenericTypeDefinition );
Console::WriteLine( L"\tIs it a generic type? {0}",
t->IsGenericType );
array<Type^>^typeArguments = t->GetGenericArguments();
Console::WriteLine( L"\tList type arguments ({0}):",
typeArguments->Length );
System::Collections::IEnumerator^ myEnum =
typeArguments->GetEnumerator();
while ( myEnum->MoveNext() )
{
Type^ tParam = safe_cast<Type^>(myEnum->Current);
Console::WriteLine( L"\t\t{0}", tParam );
}
}
};
int main()
{
Test::Main();
}
/* 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
*/
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
*/
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
'
Comentários
Uma definição de tipo genérico é um modelo do qual outros tipos podem ser construídos. Por exemplo, na definição de tipo genérico (expressa na sintaxe C#; no Visual Basic ou no G<T>
G(Of T)
generic <typename T> ref class G
C++), você pode construir e criar uma instanência do tipo G<int>
( G(Of Integer)
em Visual Basic). Dado um Type objeto que representa esse tipo construído, o método retorna a GetGenericTypeDefinition definição de tipo genérico.
Se dois tipos construídos são criados com a mesma definição de tipo genérico, usando os mesmos argumentos de tipo, o método retorna o GetGenericTypeDefinition mesmo objeto para ambos os Type tipos.
Se você chamar o GetGenericTypeDefinition método em um objeto que já representa uma definição de tipo Type genérico, ele retornará o Type atual.
Importante
Uma matriz de tipos genéricos não é genérica em si. No código C# A<int>[] v;
ou no código Visual Basic , o tipo de Dim v() As A(Of Integer)
variável não é v
genérico. Use IsGenericType para determinar se um tipo é genérico antes de chamar GetGenericTypeDefinition .
Para obter uma lista das condições invariáveis para termos usados na reflexão genérica, consulte os comentários da propriedade IsGenericType.