Type.IsGenericTypeDefinition Properti
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.
Mendapatkan nilai yang menunjukkan apakah saat ini Type mewakili definisi jenis generik, dari mana jenis generik lainnya dapat dibangun.
public:
virtual property bool IsGenericTypeDefinition { bool get(); };
public virtual bool IsGenericTypeDefinition { get; }
member this.IsGenericTypeDefinition : bool
Public Overridable ReadOnly Property IsGenericTypeDefinition As Boolean
Nilai Properti
true
Type jika objek mewakili definisi jenis generik; jika tidak, false
.
Contoh
Contoh berikut menampilkan informasi tentang jenis, termasuk apakah itu definisi jenis generik atau tidak. Informasi ditampilkan untuk jenis yang dibangun, untuk definisi jenis generiknya, dan untuk jenis biasa.
using namespace System;
using namespace System::Reflection;
using namespace System::Collections::Generic;
public ref class Test
{
private:
static void DisplayGenericTypeInfo( 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 );
if ( t->IsGenericType )
{
// If this is a generic type, display the type arguments.
//
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);
// If this is a type parameter, display its
// position.
//
if ( tParam->IsGenericParameter )
{
Console::WriteLine(
L"\t\t{0}\t(unassigned - parameter position {1})",
tParam, tParam->GenericParameterPosition );
}
else
{
Console::WriteLine( L"\t\t{0}", tParam );
}
}
}
}
public:
static void Main()
{
Console::Write( L"\r\n--- Display information about a " );
Console::WriteLine( L"constructed type, its" );
Console::WriteLine( L" generic type definition, and an ordinary type." );
// Create a Dictionary of Test objects, using strings for the
// keys.
Dictionary< String^,Test^ >^ d = gcnew Dictionary< String^,Test^ >;
// Display information for the constructed type and its generic
// type definition.
DisplayGenericTypeInfo( d->GetType() );
DisplayGenericTypeInfo( d->GetType()->GetGenericTypeDefinition() );
// Display information for an ordinary type.
DisplayGenericTypeInfo( String::typeid );
}
};
int main()
{
Test::Main();
}
/* This example produces the following output:
--- Display information about a constructed type, its
generic type definition, and an ordinary type.
System.Collections.Generic.Dictionary[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[TKey,TValue]
Is this a generic type definition? True
Is it a generic type? True
List type arguments (2):
TKey (unassigned - parameter position 0)
TValue (unassigned - parameter position 1)
System.String
Is this a generic type definition? False
Is it a generic type? False
*/
using System;
using System.Reflection;
using System.Collections.Generic;
public class Test
{
private static void DisplayGenericTypeInfo(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);
if (t.IsGenericType)
{
// If this is a generic type, display the type arguments.
//
Type[] typeArguments = t.GetGenericArguments();
Console.WriteLine("\tList type arguments ({0}):",
typeArguments.Length);
foreach (Type tParam in typeArguments)
{
// If this is a type parameter, display its
// position.
//
if (tParam.IsGenericParameter)
{
Console.WriteLine("\t\t{0}\t(unassigned - parameter position {1})",
tParam,
tParam.GenericParameterPosition);
}
else
{
Console.WriteLine("\t\t{0}", tParam);
}
}
}
}
public static void Main()
{
Console.WriteLine("\r\n--- Display information about a constructed type, its");
Console.WriteLine(" generic type definition, and an ordinary type.");
// Create a Dictionary of Test objects, using strings for the
// keys.
Dictionary<string, Test> d = new Dictionary<string, Test>();
// Display information for the constructed type and its generic
// type definition.
DisplayGenericTypeInfo(d.GetType());
DisplayGenericTypeInfo(d.GetType().GetGenericTypeDefinition());
// Display information for an ordinary type.
DisplayGenericTypeInfo(typeof(string));
}
}
/* This example produces the following output:
--- Display information about a constructed type, its
generic type definition, and an ordinary type.
System.Collections.Generic.Dictionary[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[TKey,TValue]
Is this a generic type definition? True
Is it a generic type? True
List type arguments (2):
TKey (unassigned - parameter position 0)
TValue (unassigned - parameter position 1)
System.String
Is this a generic type definition? False
Is it a generic type? False
*/
open System
open System.Collections.Generic
type Test() = class end
let displayGenericTypeInfo (t: Type) =
printfn $"\n{t}"
printfn $"\tIs this a generic type definition? {t.IsGenericTypeDefinition}"
printfn $"\tIs it a generic type? {t.IsGenericType}"
if t.IsGenericType then
// If this is a generic type, display the type arguments.
let typeArguments = t.GetGenericArguments()
printfn $"\tList type arguments ({typeArguments.Length}):"
for tParam in typeArguments do
// If this is a type parameter, display its
// position.
if tParam.IsGenericParameter then
printfn $"\t\t{tParam}\t(unassigned - parameter position {tParam.GenericParameterPosition})"
else
printfn $"\t\t{tParam}"
printfn "\r\n--- Display information about a constructed type, its"
printfn " generic type definition, and an ordinary type."
// Create a Dictionary of Test objects, using strings for the keys.
let d = Dictionary<string, Test>()
// Display information for the constructed type and its generic
// type definition.
displayGenericTypeInfo (d.GetType())
displayGenericTypeInfo (d.GetType().GetGenericTypeDefinition())
// Display information for an ordinary type.
displayGenericTypeInfo typeof<string>
(* This example produces the following output:
--- Display information about a constructed type, its
generic type definition, and an ordinary type.
System.Collections.Generic.Dictionary[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[TKey,TValue]
Is this a generic type definition? True
Is it a generic type? True
List type arguments (2):
TKey (unassigned - parameter position 0)
TValue (unassigned - parameter position 1)
System.String
Is this a generic type definition? False
Is it a generic type? False
*)
Imports System.Reflection
Imports System.Collections.Generic
Public Class Test
Private Shared Sub DisplayGenericTypeInfo(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)
If t.IsGenericType Then
' If this is a generic type, display the type arguments.
'
Dim typeArguments As Type() = t.GetGenericArguments()
Console.WriteLine(vbTab & "List type arguments (" _
& typeArguments.Length & "):")
For Each tParam As Type In typeArguments
' If this is a type parameter, display its position.
'
If tParam.IsGenericParameter Then
Console.WriteLine(vbTab & vbTab & tParam.ToString() _
& vbTab & "(unassigned - parameter position " _
& tParam.GenericParameterPosition & ")")
Else
Console.WriteLine(vbTab & vbTab & tParam.ToString())
End If
Next tParam
End If
End Sub
Public Shared Sub Main()
Console.WriteLine(vbCrLf & "--- Display information about a constructed type, its")
Console.WriteLine(" generic type definition, and an ordinary type.")
' Create a Dictionary of Test objects, using strings for the
' keys.
Dim d As New Dictionary(Of String, Test)()
DisplayGenericTypeInfo(d.GetType())
DisplayGenericTypeInfo(d.GetType().GetGenericTypeDefinition())
' Display information for an ordinary type.
DisplayGenericTypeInfo(GetType(String))
End Sub
End Class
' This example produces the following output:
'
'--- Display information about a constructed type, its
' generic type definition, and an ordinary type.
'
'System.Collections.Generic.Dictionary[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[TKey,TValue]
' Is this a generic type definition? True
' Is it a generic type? True
' List type arguments (2):
' TKey (unassigned - parameter position 0)
' TValue (unassigned - parameter position 1)
'
'System.String
' Is this a generic type definition? False
' Is it a generic type? False
Keterangan
Definisi jenis generik adalah templat tempat jenis lain dapat dibangun. Misalnya, dari definisi G<T>
jenis generik (dinyatakan dalam sintaks C#; G(Of T)
dalam Visual Basic atau generic <typename T> ref class G
di C++) Anda dapat membuat dan membuat instans jenis G<int>
(G(Of Integer)
di Visual Basic), dengan memanggil MakeGenericType metode dengan daftar argumen generik yang berisi Int32 jenis . Mengingat objek yang Type mewakili jenis yang dibangun ini, GetGenericTypeDefinition metode mendapatkan kembali definisi jenis generik.
IsGenericTypeDefinition Gunakan properti untuk menentukan apakah Anda dapat membuat jenis baru dari jenis saat ini.
IsGenericTypeDefinition Jika properti mengembalikan true
, Anda dapat memanggil MakeGenericType metode untuk membuat jenis generik baru.
Untuk daftar kondisi invarian bagi istilah yang digunakan dalam refleksi generik, lihat keterangan properti IsGenericType.