Type.IsGenericTypeDefinition Properti

Definisi

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

trueType 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.

Berlaku untuk

Lihat juga