Type.GetGenericTypeDefinition Metode
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Mengembalikan Type objek yang mewakili definisi jenis generik dari mana jenis generik saat ini dapat dibangun.
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
Mengembalikan
Objek Type yang mewakili jenis generik dari mana jenis saat ini dapat dibangun.
Pengecualian
Jenis saat ini bukan tipe generik. Artinya, IsGenericType mengembalikan false.
Metode yang dipanggil tidak didukung di kelas dasar. Kelas turunan harus memberikan implementasi.
Contoh
Contoh kode berikut membuat instans jenis yang dibangun dengan menggunakan pembuatan instans GetType biasa lalu menggunakan metode dan GetGenericTypeDefinition untuk mengambil jenis yang dibangun dan definisi jenis generik. Contoh ini menggunakan jenis generik Dictionary<TKey,TValue> ; jenis yang dibangun mewakili Dictionary<TKey,TValue>Test objek dengan kunci string.
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
'
Keterangan
Definisi jenis generik adalah templat tempat jenis lain dapat dibangun. Misalnya, dari definisi G<T>jenis generik C# , Anda dapat membuat dan membuat instans jenis G<int>. Mengingat objek yang Type mewakili jenis yang dibangun ini, GetGenericTypeDefinition metode mengembalikan definisi jenis generik.
Jika dua jenis yang dibuat dibuat dari definisi jenis generik yang sama, menggunakan argumen jenis yang sama, GetGenericTypeDefinition metode mengembalikan objek yang sama Type untuk kedua jenis.
Jika Anda memanggil GetGenericTypeDefinition metode pada Type objek yang sudah mewakili definisi jenis generik, metode mengembalikan Type.
Penting
Array jenis generik tidak sendiri generik. Dalam kode A<int>[] v; C# atau kode Dim v() As A(Of Integer)Visual Basic , jenis variabel v tidak umum. Gunakan IsGenericType untuk menentukan apakah jenis umum sebelum memanggil GetGenericTypeDefinition.
Untuk daftar ketentuan invarian untuk istilah yang digunakan dalam refleksi generik, lihat IsGenericType keterangan properti.