GenericTypeParameterBuilderとは? わかりやすく解説

GenericTypeParameterBuilder クラス

メモ : このクラスは、.NET Framework version 2.0新しく追加されたものです。

動的に定義されジェネリック型およびジェネリック メソッドジェネリック型パラメータを定義および作成します。このクラス継承できません。

名前空間: System.Reflection.Emit
アセンブリ: mscorlib (mscorlib.dll 内)
構文構文

<ComVisibleAttribute(True)> _
Public NotInheritable Class
 GenericTypeParameterBuilder
    Inherits Type
Dim instance As GenericTypeParameterBuilder
[ComVisibleAttribute(true)] 
public sealed class GenericTypeParameterBuilder
 : Type
[ComVisibleAttribute(true)] 
public ref class GenericTypeParameterBuilder
 sealed : public Type
/** @attribute ComVisibleAttribute(true) */ 
public final class GenericTypeParameterBuilder
 extends Type
ComVisibleAttribute(true) 
public final class GenericTypeParameterBuilder
 extends Type
解説解説

TypeBuilder.DefineGenericParameters メソッド使用して型パラメータ動的型追加し動的型ジェネリック型にするか、MethodBuilder.DefineGenericParameters メソッド使用して型パラメータ動的メソッド追加することによって、GenericTypeParameterBuilder オブジェクト配列取得できますGenericTypeParameterBuilder オブジェクト使用して型パラメータ制約加えます次の 3 種類の制約あります

インターフェイス制約特殊な制約は、GenericTypeParameterBuilder クラスメソッド使用して取得することはできません。型パラメータを含むジェネリック型作成すると、その Type オブジェクト使用して制約リフレクションできるようになります。Type.GetGenericArguments メソッド使用して型パラメータ取得し各型パラメータに対して、Type.GetGenericParameterConstraints メソッド使用して基本型制約インターフェイス制約取得します特殊な制約取得するには、Type.GenericParameterAttributes プロパティ使用します

使用例使用例

2 つの型パラメータを持つジェネリック型作成しアセンブリ GenericEmitExample1.dll に保存するコード例次に示しますMSIL 逆アセンブラ (Ildasm.exe) を使用して生成された型を表示できます動的ジェネリック型の定義に関連する手順詳細については、「方法 : リフレクション出力使用してジェネリック型定義する」を参照してください

Imports System
Imports System.Reflection
Imports System.Reflection.Emit
Imports System.Collections.Generic

' Define a trivial base class and two trivial interfaces 
' to use when demonstrating constraints.
'
Public Class ExampleBase
End Class

Public Interface IExampleA
End Interface

Public Interface IExampleB
End Interface

' Define a trivial type that can substitute for type parameter 
' TSecond.
'
Public Class ExampleDerived
    Inherits ExampleBase
    Implements IExampleA, IExampleB
End Class

Public Class Example
    Public Shared Sub Main()
        ' Define a dynamic assembly to contain the sample type. The
        ' assembly will not be run, but only saved to disk, so
        ' AssemblyBuilderAccess.Save is specified.
        '
        Dim myDomain As AppDomain = AppDomain.CurrentDomain
        Dim myAsmName As New
 AssemblyName("GenericEmitExample1")
        Dim myAssembly As AssemblyBuilder =
 myDomain.DefineDynamicAssembly( _
            myAsmName, _
            AssemblyBuilderAccess.RunAndSave)

        ' An assembly is made up of executable modules. For a single-
        ' module assembly, the module name and file name are the same
 
        ' as the assembly name. 
        '
        Dim myModule As ModuleBuilder = myAssembly.DefineDynamicModule(
 _
            myAsmName.Name, _
            myAsmName.Name & ".dll")

        ' Get type objects for the base class trivial interfaces to
        ' be used as constraints.
        '
        Dim baseType As Type = GetType(ExampleBase)
        Dim interfaceA As Type = GetType(IExampleA)
        Dim interfaceB As Type = GetType(IExampleB)
                
        ' Define the sample type.
        '
        Dim myType As TypeBuilder = myModule.DefineType(
 _
            "Sample", _
            TypeAttributes.Public)

        Console.WriteLine("Type 'Sample' is generic: {0}",
 _
            myType.IsGenericType)

        ' Define type parameters for the type. Until you do this, 
        ' the type is not generic, as the preceding and following 
        ' WriteLine statements show. The type parameter names are
        ' specified as an array of strings. To make the code
        ' easier to read, each GenericTypeParameterBuilder is placed
        ' in a variable with the same name as the type parameter.
        ' 
        Dim typeParamNames() As String
 = {"TFirst", "TSecond"}
        Dim typeParams() As GenericTypeParameterBuilder
 = _
            myType.DefineGenericParameters(typeParamNames)

        Dim TFirst As GenericTypeParameterBuilder
 = typeParams(0)
        Dim TSecond As GenericTypeParameterBuilder
 = typeParams(1)

        Console.WriteLine("Type 'Sample' is generic: {0}",
 _
            myType.IsGenericType)

        ' Apply constraints to the type parameters.
        '
        ' A type that is substituted for the first parameter, TFirst
,
        ' must be a reference type and must have a parameterless
        ' constructor.
        TFirst.SetGenericParameterAttributes( _
            GenericParameterAttributes.DefaultConstructorConstraint _
            Or GenericParameterAttributes.ReferenceTypeConstraint)

        ' A type that is substituted for the second type
        ' parameter must implement IExampleA and IExampleB, and
        ' inherit from the trivial test class ExampleBase. The
        ' interface constraints are specified as an array 
        ' containing the interface types.
        TSecond.SetBaseTypeConstraint(baseType)
        Dim interfaceTypes() As Type = {interfaceA,
 interfaceB}
        TSecond.SetInterfaceConstraints(interfaceTypes)

        ' The following code adds a private field named ExampleField
,
        ' of type TFirst.
        Dim exField As FieldBuilder = _
            myType.DefineField("ExampleField", TFirst,
 _
                FieldAttributes.Private)

        ' Define a Shared method that takes an array of TFirst and 
        ' returns a List(Of TFirst) containing all the elements of 
        ' the array. To define this method it is necessary to create
        ' the type List(Of TFirst) by calling MakeGenericType on the
        ' generic type definition, List(Of T). (The T is omitted with
        ' the GetType operator when you get the generic type 
        ' definition.) The parameter type is created by using the
        ' MakeArrayType method. 
        '
        Dim listOf As Type = GetType(List(Of
 ))
        Dim listOfTFirst As Type = listOf.MakeGenericType(TFirst)
        Dim mParamTypes() As Type = { TFirst.MakeArrayType()
 }

        Dim exMethod As MethodBuilder = _
            myType.DefineMethod("ExampleMethod", _
                MethodAttributes.Public Or MethodAttributes.Static,
 _
                listOfTFirst, _
                mParamTypes)

        ' Emit the method body. 
        ' The method body consists of just three opcodes, to load 
        ' the input array onto the execution stack, to call the 
        ' List(Of TFirst) constructor that takes IEnumerable(Of TFirst)
,
        ' which does all the work of putting the input elements into
        ' the list, and to return, leaving the list on the stack. The
        ' hard work is getting the constructor.
        ' 
        ' The GetConstructor method is not supported on a 
        ' GenericTypeParameterBuilder, so it is not possible to get
 
        ' the constructor of List(Of TFirst) directly. There are two
        ' steps, first getting the constructor of List(Of T) and then
        ' calling a method that converts it to the corresponding 
        ' constructor of List(Of TFirst).
        '
        ' The constructor needed here is the one that takes an
        ' IEnumerable(Of T). Note, however, that this is not the 
        ' generic type definition of IEnumerable(Of T); instead, the
        ' T from List(Of T) must be substituted for the T of 
        ' IEnumerable(Of T). (This seems confusing only because both
        ' types have type parameters named T. That is why this example
        ' uses the somewhat silly names TFirst and TSecond.) To get
        ' the type of the constructor argument, take the generic
        ' type definition IEnumerable(Of T) (expressed as 
        ' IEnumerable(Of ) when you use the GetType operator) and 
        ' call MakeGenericType with the first generic type parameter
        ' of List(Of T). The constructor argument list must be passed
        ' as an array, with just one argument in this case.
        ' 
        ' Now it is possible to get the constructor of List(Of T),
        ' using GetConstructor on the generic type definition. To get
        ' the constructor of List(Of TFirst), pass List(Of TFirst) and
        ' the constructor from List(Of T) to the static
        ' TypeBuilder.GetConstructor method.
        '
        Dim ilgen As ILGenerator = exMethod.GetILGenerator()
        
        Dim ienumOf As Type = GetType(IEnumerable(Of
 ))
        Dim listOfTParams() As Type = listOf.GetGenericArguments()
        Dim TfromListOf As Type = listOfTParams(0)
        Dim ienumOfT As Type = ienumOf.MakeGenericType(TfromListOf)
        Dim ctorArgs() As Type = { ienumOfT
 }

        Dim ctorPrep As ConstructorInfo = _
            listOf.GetConstructor(ctorArgs)
        Dim ctor As ConstructorInfo = _
            TypeBuilder.GetConstructor(listOfTFirst, ctorPrep)

        ilgen.Emit(OpCodes.Ldarg_0)
        ilgen.Emit(OpCodes.Newobj, ctor)
        ilgen.Emit(OpCodes.Ret)

        ' Create the type and save the assembly. 
        Dim finished As Type = myType.CreateType()
        myAssembly.Save(myAsmName.Name & ".dll")

        ' Invoke the method.
        ' ExampleMethod is not generic, but the type it belongs to is
        ' generic, so in order to get a MethodInfo that can be invoked
        ' it is necessary to create a constructed type. The Example
 
        ' class satisfies the constraints on TFirst, because it is a
 
        ' reference type and has a default constructor. In order to
        ' have a class that satisfies the constraints on TSecond, 
        ' this code example defines the ExampleDerived type. These
        ' two types are passed to MakeGenericMethod to create the
        ' constructed type.
        '
        Dim typeArgs() As Type = _
            { GetType(Example), GetType(ExampleDerived)
 }
        Dim constructed As Type = finished.MakeGenericType(typeArgs)
        Dim mi As MethodInfo = constructed.GetMethod("ExampleMethod")

        ' Create an array of Example objects, as input to the generic
        ' method. This array must be passed as the only element of an
 
        ' array of arguments. The first argument of Invoke is 
        ' Nothing, because ExampleMethod is Shared. Display the count
        ' on the resulting List(Of Example).
        ' 
        Dim input() As Example = { New
 Example(), New Example() }
        Dim arguments() As Object
 = { input }

        Dim listX As List(Of
 Example) = mi.Invoke(Nothing, arguments)

        Console.WriteLine(vbLf & _
            "There are {0} elements in the List(Of Example).",
 _
            listX.Count _ 
        )

        DisplayGenericParameters(finished)
    End Sub

    Private Shared Sub DisplayGenericParameters(ByVal
 t As Type)

        If Not t.IsGenericType Then
            Console.WriteLine("Type '{0}' is not generic.")
            Return
        End If
        If Not t.IsGenericTypeDefinition Then
 _
            t = t.GetGenericTypeDefinition()

        Dim typeParameters() As Type = t.GetGenericArguments()
        Console.WriteLine(vbCrLf & _
            "Listing {0} type parameters for type '{1}'.",
 _
            typeParameters.Length, t)

        For Each tParam As
 Type In typeParameters

            Console.WriteLine(vbCrLf & "Type parameter {0}:",
 _
                tParam.ToString())

            For Each c As
 Type In tParam.GetGenericParameterConstraints()
                If c.IsInterface Then
                    Console.WriteLine("    Interface constraint:
 {0}", c)
                Else
                    Console.WriteLine("    Base type constraint:
 {0}", c)
                End If
            Next 

            ListConstraintAttributes(tParam)
        Next tParam
    End Sub

    ' List the constraint flags. The GenericParameterAttributes
    ' enumeration contains two sets of attributes, variance and
    ' constraints. For this example, only constraints are used.
    '
    Private Shared Sub ListConstraintAttributes(ByVal
 t As Type)

        ' Mask off the constraint flags. 
        Dim constraints As GenericParameterAttributes
 = _
            t.GenericParameterAttributes And _
            GenericParameterAttributes.SpecialConstraintMask

        If (constraints And GenericParameterAttributes.ReferenceTypeConstraint)
 _
                <> GenericParameterAttributes.None Then
 _
            Console.WriteLine("    ReferenceTypeConstraint")

        If (constraints And GenericParameterAttributes.NotNullableValueTypeConstraint)
 _
                <> GenericParameterAttributes.None Then
 _
            Console.WriteLine("    NotNullableValueTypeConstraint")

        If (constraints And GenericParameterAttributes.DefaultConstructorConstraint)
 _
                <> GenericParameterAttributes.None Then
 _
            Console.WriteLine("    DefaultConstructorConstraint")

    End Sub 

End Class

' This code example produces the following output:
'
'Type 'Sample' is generic: False
'Type 'Sample' is generic: True
'
'There are 2 elements in the List(Of Example).
'
'Listing 2 type parameters for type 'Sample[TFirst,TSecond]'.
'
'Type parameter TFirst:
'    ReferenceTypeConstraint
'    DefaultConstructorConstraint
'
'Type parameter TSecond:
'    Interface constraint: IExampleA
'    Interface constraint: IExampleB
'    Base type constraint: ExampleBase
using System;
using System.Reflection;
using System.Reflection.Emit;
using System.Collections.Generic;

// Define a trivial base class and two trivial interfaces 
// to use when demonstrating constraints.
//
public class ExampleBase {}

public interface IExampleA {}

public interface IExampleB {}

// Define a trivial type that can substitute for type parameter 
// TSecond.
//
public class ExampleDerived : ExampleBase,
 IExampleA, IExampleB {}


public class Example
{
    public static void Main()
    {
        // Define a dynamic assembly to contain the sample type. The
        // assembly will not be run, but only saved to disk, so
        // AssemblyBuilderAccess.Save is specified.
        //
        AppDomain myDomain = AppDomain.CurrentDomain;
        AssemblyName myAsmName = new AssemblyName("GenericEmitExample1");
        AssemblyBuilder myAssembly = 
            myDomain.DefineDynamicAssembly(myAsmName, 
                AssemblyBuilderAccess.RunAndSave);

        // An assembly is made up of executable modules. For a single-
        // module assembly, the module name and file name are the same
 
        // as the assembly name. 
        //
        ModuleBuilder myModule = 
            myAssembly.DefineDynamicModule(myAsmName.Name, 
               myAsmName.Name + ".dll");

        // Get type objects for the base class trivial interfaces to
        // be used as constraints.
        //
        Type baseType = typeof(ExampleBase);
        Type interfaceA = typeof(IExampleA);
        Type interfaceB = typeof(IExampleB);
                
        // Define the sample type.
        //
        TypeBuilder myType = 
            myModule.DefineType("Sample", TypeAttributes.Public);

        Console.WriteLine("Type 'Sample' is generic: {0}", 
            myType.IsGenericType);

        // Define type parameters for the type. Until you do this, 
        // the type is not generic, as the preceding and following 
        // WriteLine statements show. The type parameter names are
        // specified as an array of strings. To make the code
        // easier to read, each GenericTypeParameterBuilder is placed
        // in a variable with the same name as the type parameter.
        // 
        string[] typeParamNames = {"TFirst", "TSecond"};
        GenericTypeParameterBuilder[] typeParams = 
            myType.DefineGenericParameters(typeParamNames);

        GenericTypeParameterBuilder TFirst = typeParams[0];
        GenericTypeParameterBuilder TSecond = typeParams[1];

        Console.WriteLine("Type 'Sample' is generic: {0}", 
            myType.IsGenericType);

        // Apply constraints to the type parameters.
        //
        // A type that is substituted for the first parameter, TFirst
,
        // must be a reference type and must have a parameterless
        // constructor.
        TFirst.SetGenericParameterAttributes(
            GenericParameterAttributes.DefaultConstructorConstraint |
            GenericParameterAttributes.ReferenceTypeConstraint);

        // A type that is substituted for the second type
        // parameter must implement IExampleA and IExampleB, and
        // inherit from the trivial test class ExampleBase. The
        // interface constraints are specified as an array 
        // containing the interface types.
        TSecond.SetBaseTypeConstraint(baseType);
        Type[] interfaceTypes = {interfaceA, interfaceB};
        TSecond.SetInterfaceConstraints(interfaceTypes);

        // The following code adds a private field named ExampleField
,
        // of type TFirst.
        FieldBuilder exField = 
            myType.DefineField("ExampleField", TFirst, 
                FieldAttributes.Private);

        // Define a static method that takes an array of TFirst and
 
        // returns a List<TFirst> containing all the elements
 of 
        // the array. To define this method it is necessary to create
        // the type List<TFirst> by calling MakeGenericType on
 the
        // generic type definition, List<T>. (The T is omitted
 with
        // the typeof operator when you get the generic type 
        // definition.) The parameter type is created by using the
        // MakeArrayType method. 
        //
        Type listOf = typeof(List<>);
        Type listOfTFirst = listOf.MakeGenericType(TFirst);
        Type[] mParamTypes = {TFirst.MakeArrayType()};

        MethodBuilder exMethod = 
            myType.DefineMethod("ExampleMethod", 
                MethodAttributes.Public | MethodAttributes.Static, 
                listOfTFirst, 
                mParamTypes);

        // Emit the method body. 
        // The method body consists of just three opcodes, to load 
        // the input array onto the execution stack, to call the 
        // List<TFirst> constructor that takes IEnumerable<TFirst>
,
        // which does all the work of putting the input elements into
        // the list, and to return, leaving the list on the stack. The
        // hard work is getting the constructor.
        // 
        // The GetConstructor method is not supported on a 
        // GenericTypeParameterBuilder, so it is not possible to get
 
        // the constructor of List<TFirst> directly. There are
 two
        // steps, first getting the constructor of List<T> and
 then
        // calling a method that converts it to the corresponding 
        // constructor of List<TFirst>.
        //
        // The constructor needed here is the one that takes an
        // IEnumerable<T>. Note, however, that this is not the
 
        // generic type definition of IEnumerable<T>; instead,
 the
        // T from List<T> must be substituted for the T of 
        // IEnumerable<T>. (This seems confusing only because
 both
        // types have type parameters named T. That is why this example
        // uses the somewhat silly names TFirst and TSecond.) To get
        // the type of the constructor argument, take the generic
        // type definition IEnumerable<T> (expressed as 
        // IEnumerable<> when you use the typeof operator) and
 
        // call MakeGenericType with the first generic type parameter
        // of List<T>. The constructor argument list must be passed
        // as an array, with just one argument in this case.
        // 
        // Now it is possible to get the constructor of List<T>
,
        // using GetConstructor on the generic type definition. To get
        // the constructor of List<TFirst>, pass List<TFirst>
 and
        // the constructor from List<T> to the static
        // TypeBuilder.GetConstructor method.
        //
        ILGenerator ilgen = exMethod.GetILGenerator();
        
        Type ienumOf = typeof(IEnumerable<>);
        Type TfromListOf = listOf.GetGenericArguments()[0];
        Type ienumOfT = ienumOf.MakeGenericType(TfromListOf);
        Type[] ctorArgs = {ienumOfT};

        ConstructorInfo ctorPrep = listOf.GetConstructor(ctorArgs);
        ConstructorInfo ctor = 
            TypeBuilder.GetConstructor(listOfTFirst, ctorPrep);

        ilgen.Emit(OpCodes.Ldarg_0);
        ilgen.Emit(OpCodes.Newobj, ctor);
        ilgen.Emit(OpCodes.Ret);

        // Create the type and save the assembly. 
        Type finished = myType.CreateType();
        myAssembly.Save(myAsmName.Name+".dll");

        // Invoke the method.
        // ExampleMethod is not generic, but the type it belongs to
 is
        // generic, so in order to get a MethodInfo that can be invoked
        // it is necessary to create a constructed type. The Example
 
        // class satisfies the constraints on TFirst, because it is
 a 
        // reference type and has a default constructor. In order to
        // have a class that satisfies the constraints on TSecond, 
        // this code example defines the ExampleDerived type. These
        // two types are passed to MakeGenericMethod to create the
        // constructed type.
        //
        Type[] typeArgs = {typeof(Example), typeof(ExampleDerived)};
        Type constructed = finished.MakeGenericType(typeArgs);
        MethodInfo mi = constructed.GetMethod("ExampleMethod");

        // Create an array of Example objects, as input to the generic
        // method. This array must be passed as the only element of
 an 
        // array of arguments. The first argument of Invoke is 
        // null, because ExampleMethod is static. Display the count
        // on the resulting List<Example>.
        // 
        Example[] input = {new Example(), new
 Example()};
        object[] arguments = {input};

        List<Example> listX = 
            (List<Example>) mi.Invoke(null, arguments);

        Console.WriteLine(
            "\nThere are {0} elements in the List<Example>.",
 
            listX.Count);

        DisplayGenericParameters(finished);
    }

    private static void
 DisplayGenericParameters(Type t)
    {
        if (!t.IsGenericType)
        {
            Console.WriteLine("Type '{0}' is not generic.");
            return;
        }
        if (!t.IsGenericTypeDefinition) 
        {
            t = t.GetGenericTypeDefinition();
        }

        Type[] typeParameters = t.GetGenericArguments();
        Console.WriteLine("\nListing {0} type parameters for
 type '{1}'.",
            typeParameters.Length, t);

        foreach( Type tParam in typeParameters
 )
        {
            Console.WriteLine("\r\nType parameter {0}:", tParam.ToString());

            foreach( Type c in tParam.GetGenericParameterConstraints()
 )
            {
                if (c.IsInterface)
                {
                    Console.WriteLine("    Interface constraint: {0}",
 c);
                }
                else
                {
                    Console.WriteLine("    Base type constraint: {0}",
 c);
                }
            }

            ListConstraintAttributes(tParam);
        }
    }

    // List the constraint flags. The GenericParameterAttributes
    // enumeration contains two sets of attributes, variance and
    // constraints. For this example, only constraints are used.
    //
    private static void
 ListConstraintAttributes(Type t)
    {
        // Mask off the constraint flags. 
        GenericParameterAttributes constraints = 
            t.GenericParameterAttributes & GenericParameterAttributes.SpecialConstraintMask;

        if ((constraints & GenericParameterAttributes.ReferenceTypeConstraint)
            != GenericParameterAttributes.None) 
        {
            Console.WriteLine("    ReferenceTypeConstraint");
        }

        if ((constraints & GenericParameterAttributes.NotNullableValueTypeConstraint)
            != GenericParameterAttributes.None) 
        {
            Console.WriteLine("    NotNullableValueTypeConstraint");
        }

        if ((constraints & GenericParameterAttributes.DefaultConstructorConstraint)
            !=GenericParameterAttributes.None) 
        {
            Console.WriteLine("    DefaultConstructorConstraint");
        }
    }
}

/* This code example produces the following output:

Type 'Sample' is generic: False
Type 'Sample' is generic: True

There are 2 elements in the List<Example>.

Listing 2 type parameters for type 'Sample[TFirst,TSecond]'.

Type parameter TFirst:
    ReferenceTypeConstraint
    DefaultConstructorConstraint

Type parameter TSecond:
    Interface constraint: IExampleA
    Interface constraint: IExampleB
    Base type constraint: ExampleBase
 */
using namespace System;
using namespace System::Reflection;
using namespace System::Reflection::Emit;
using namespace System::Collections::Generic;

// Dummy class to satisfy TFirst constraints.
//
public ref class Example {};

// Define a trivial base class and two trivial interfaces 
// to use when demonstrating constraints.
//
public ref class ExampleBase {};
public interface class IExampleA {};
public interface class IExampleB {};

// Define a trivial type that can substitute for type parameter 
// TSecond.
//
public ref class ExampleDerived : ExampleBase,
 IExampleA, IExampleB {};

// List the constraint flags. The GenericParameterAttributes
// enumeration contains two sets of attributes, variance and
// constraints. For this example, only constraints are used.
//
static void ListConstraintAttributes( Type^
 t )
{
   // Mask off the constraint flags. 
   GenericParameterAttributes constraints = 
       t->GenericParameterAttributes & 
       GenericParameterAttributes::SpecialConstraintMask;

   if ((constraints & GenericParameterAttributes::ReferenceTypeConstraint)
           != GenericParameterAttributes::None)
       Console::WriteLine( L"    ReferenceTypeConstraint");

   if ((constraints & GenericParameterAttributes::NotNullableValueTypeConstraint)
           != GenericParameterAttributes::None)
       Console::WriteLine( L"    NotNullableValueTypeConstraint");

   if ((constraints & GenericParameterAttributes::DefaultConstructorConstraint)
           != GenericParameterAttributes::None)
       Console::WriteLine( L"    DefaultConstructorConstraint");
}

static void DisplayGenericParameters( Type^
 t )
{
   if (!t->IsGenericType)
   {
       Console::WriteLine( L"Type '{0}' is not generic." );
       return;
   }
   if (!t->IsGenericTypeDefinition)
       t = t->GetGenericTypeDefinition();

   array<Type^>^ typeParameters = t->GetGenericArguments();
   Console::WriteLine( L"\r\nListing {0} type parameters for
 type '{1}'.", 
       typeParameters->Length, t );

   for each ( Type^ tParam in typeParameters
 )
   {
       Console::WriteLine( L"\r\nType parameter {0}:", 
           tParam->ToString() );

       for each (Type^ c in tParam->GetGenericParameterConstraints())
       {
           if (c->IsInterface)
               Console::WriteLine( L"    Interface constraint: {0}", c);
           else
               Console::WriteLine( L"    Base type constraint: {0}", c);
       }
       ListConstraintAttributes(tParam);
   }
}

void main()
{
   // Define a dynamic assembly to contain the sample type. The
   // assembly will be run and also saved to disk, so
   // AssemblyBuilderAccess.RunAndSave is specified.
   //
   AppDomain^ myDomain = AppDomain::CurrentDomain;
   AssemblyName^ myAsmName = gcnew AssemblyName( L"GenericEmitExample1"
 );
   AssemblyBuilder^ myAssembly = myDomain->DefineDynamicAssembly( 
       myAsmName, AssemblyBuilderAccess::RunAndSave );

   // An assembly is made up of executable modules. For a single-
   // module assembly, the module name and file name are the same 
   // as the assembly name. 
   //
   ModuleBuilder^ myModule = myAssembly->DefineDynamicModule( 
       myAsmName->Name, String::Concat( myAsmName->Name, L".dll"
 ) );

   // Get type objects for the base class trivial interfaces to
   // be used as constraints.
   //
   Type^ baseType = ExampleBase::typeid; 
   Type^ interfaceA = IExampleA::typeid; 
   Type^ interfaceB = IExampleB::typeid;
   
   // Define the sample type.
   //
   TypeBuilder^ myType = myModule->DefineType( L"Sample", 
       TypeAttributes::Public );
   
   Console::WriteLine( L"Type 'Sample' is generic: {0}", 
       myType->IsGenericType );
   
   // Define type parameters for the type. Until you do this, 
   // the type is not generic, as the preceding and following 
   // WriteLine statements show. The type parameter names are
   // specified as an array of strings. To make the code
   // easier to read, each GenericTypeParameterBuilder is placed
   // in a variable with the same name as the type parameter.
   // 
   array<String^>^typeParamNames = {L"TFirst",L"TSecond"};
   array<GenericTypeParameterBuilder^>^typeParams = 
       myType->DefineGenericParameters( typeParamNames );

   GenericTypeParameterBuilder^ TFirst = typeParams[0];
   GenericTypeParameterBuilder^ TSecond = typeParams[1];

   Console::WriteLine( L"Type 'Sample' is generic: {0}", 
       myType->IsGenericType );
   
   // Apply constraints to the type parameters.
   //
   // A type that is substituted for the first parameter, TFirst,
   // must be a reference type and must have a parameterless
   // constructor.
   TFirst->SetGenericParameterAttributes( 
       GenericParameterAttributes::DefaultConstructorConstraint | 
       GenericParameterAttributes::ReferenceTypeConstraint 
   );

   // A type that is substituted for the second type
   // parameter must implement IExampleA and IExampleB, and
   // inherit from the trivial test class ExampleBase. The
   // interface constraints are specified as an array
   // containing the interface types. 
   array<Type^>^interfaceTypes = { interfaceA, interfaceB };
   TSecond->SetInterfaceConstraints( interfaceTypes );
   TSecond->SetBaseTypeConstraint( baseType );

   // The following code adds a private field named ExampleField,
   // of type TFirst.
   FieldBuilder^ exField = 
       myType->DefineField("ExampleField", TFirst, 
           FieldAttributes::Private);

   // Define a static method that takes an array of TFirst and 
   // returns a List<TFirst> containing all the elements of 
   // the array. To define this method it is necessary to create
   // the type List<TFirst> by calling MakeGenericType on the
   // generic type definition, generic<T> List. 
   // The parameter type is created by using the
   // MakeArrayType method. 
   //
   Type^ listOf = List::typeid;
   Type^ listOfTFirst = listOf->MakeGenericType(TFirst);
   array<Type^>^ mParamTypes = { TFirst->MakeArrayType() };

   MethodBuilder^ exMethod = 
       myType->DefineMethod("ExampleMethod", 
           MethodAttributes::Public | MethodAttributes::Static, 
           listOfTFirst, 
           mParamTypes);

   // Emit the method body. 
   // The method body consists of just three opcodes, to load 
   // the input array onto the execution stack, to call the 
   // List<TFirst> constructor that takes IEnumerable<TFirst>
,
   // which does all the work of putting the input elements into
   // the list, and to return, leaving the list on the stack. The
   // hard work is getting the constructor.
   // 
   // The GetConstructor method is not supported on a 
   // GenericTypeParameterBuilder, so it is not possible to get 
   // the constructor of List<TFirst> directly. There are two
   // steps, first getting the constructor of generic<T> List
 and then
   // calling a method that converts it to the corresponding 
   // constructor of List<TFirst>.
   //
   // The constructor needed here is the one that takes an
   // IEnumerable<T>. Note, however, that this is not the 
   // generic type definition of generic<T> IEnumerable; instead,
 the
   // T from generic<T> List must be substituted for the T of
 
   // generic<T> IEnumerable. (This seems confusing only because
 both
   // types have type parameters named T. That is why this example
   // uses the somewhat silly names TFirst and TSecond.) To get
   // the type of the constructor argument, take the generic
   // type definition generic<T> IEnumerable and 
   // call MakeGenericType with the first generic type parameter
   // of generic<T> List. The constructor argument list must be
 passed
   // as an array, with just one argument in this case.
   // 
   // Now it is possible to get the constructor of generic<T>
 List,
   // using GetConstructor on the generic type definition. To get
   // the constructor of List<TFirst>, pass List<TFirst>
 and
   // the constructor from generic<T> List to the static
   // TypeBuilder.GetConstructor method.
   //
   ILGenerator^ ilgen = exMethod->GetILGenerator();
        
   Type^ ienumOf = IEnumerable::typeid;
   Type^ TfromListOf = listOf->GetGenericArguments()[0];
   Type^ ienumOfT = ienumOf->MakeGenericType(TfromListOf);
   array<Type^>^ ctorArgs = {ienumOfT};

   ConstructorInfo^ ctorPrep = listOf->GetConstructor(ctorArgs);
   ConstructorInfo^ ctor = 
       TypeBuilder::GetConstructor(listOfTFirst, ctorPrep);

   ilgen->Emit(OpCodes::Ldarg_0);
   ilgen->Emit(OpCodes::Newobj, ctor);
   ilgen->Emit(OpCodes::Ret);

   // Create the type and save the assembly. 
   Type^ finished = myType->CreateType();
   myAssembly->Save( String::Concat( myAsmName->Name, L".dll" ) );

   // Invoke the method.
   // ExampleMethod is not generic, but the type it belongs to is
   // generic, so in order to get a MethodInfo that can be invoked
   // it is necessary to create a constructed type. The Example 
   // class satisfies the constraints on TFirst, because it is a 
   // reference type and has a default constructor. In order to
   // have a class that satisfies the constraints on TSecond, 
   // this code example defines the ExampleDerived type. These
   // two types are passed to MakeGenericMethod to create the
   // constructed type.
   //
   array<Type^>^ typeArgs = 
       { Example::typeid, ExampleDerived::typeid };
   Type^ constructed = finished->MakeGenericType(typeArgs);
   MethodInfo^ mi = constructed->GetMethod("ExampleMethod");

   // Create an array of Example objects, as input to the generic
   // method. This array must be passed as the only element of an 
   // array of arguments. The first argument of Invoke is 
   // null, because ExampleMethod is static. Display the count
   // on the resulting List<Example>.
   // 
   array<Example^>^ input = { gcnew Example(), gcnew Example() };
   array<Object^>^ arguments = { input };

   List<Example^>^ listX = 
       (List<Example^>^) mi->Invoke(nullptr, arguments);

   Console::WriteLine(
       "\nThere are {0} elements in the List<Example>.",
 
       listX->Count);

   DisplayGenericParameters(finished);
}

/* This code example produces the following output:

Type 'Sample' is generic: False
Type 'Sample' is generic: True

There are 2 elements in the List<Example>.

Listing 2 type parameters for type 'Sample[TFirst,TSecond]'.

Type parameter TFirst:
    ReferenceTypeConstraint
    DefaultConstructorConstraint

Type parameter TSecond:
    Interface constraint: IExampleA
    Interface constraint: IExampleB
    Base type constraint: ExampleBase
 */
継承階層継承階層
System.Object
   System.Reflection.MemberInfo
     System.Type
      System.Reflection.Emit.GenericTypeParameterBuilder
スレッド セーフスレッド セーフ
この型の public static (Visual Basic では Shared) メンバはすべて、スレッド セーフです。インスタンス メンバ場合は、スレッド セーフであるとは限りません。
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照
関連項目
GenericTypeParameterBuilder メンバ
System.Reflection.Emit 名前空間
TypeBuilder.DefineGenericParameters
その他の技術情報
方法 : リフレクション出力使用してジェネリック型定義する

GenericTypeParameterBuilder プロパティ


パブリック プロパティパブリック プロパティ

  名前 説明
パブリック プロパティ Assembly オーバーライドされます現在の型パラメータ属すジェネリック型の定義を格納する動的アセンブリを表す Assembly オブジェクト取得します
パブリック プロパティ AssemblyQualifiedName オーバーライドされます。 常に null 参照 (Visual Basic では Nothing) を取得します
パブリック プロパティ Attributes  Type関連付けられている属性取得します。 ( Type から継承されます。)
パブリック プロパティ BaseType オーバーライドされます現在のジェネリック型パラメータ基本型制約取得します
パブリック プロパティ ContainsGenericParameters オーバーライドされます。 常に false取得します
パブリック プロパティ DeclaringMethod オーバーライドされます現在の GenericTypeParameterBuilder がジェネリック メソッド型パラメータ表している場合に、宣言するメソッドを表す MethodInfo を取得します
パブリック プロパティ DeclaringType オーバーライドされますジェネリック型パラメータ属すジェネリック型の定義、またはジェネリック メソッドの定義を取得します
パブリック プロパティ DefaultBinder  既定バインダへの参照取得します。このバインダは、InvokeMember によって呼び出される適切なメンバ選択するための内部規則実装ます。 ( Type から継承されます。)
パブリック プロパティ FullName オーバーライドされます。 常に null 参照 (Visual Basic では Nothing) を取得します
パブリック プロパティ GenericParameterAttributes  現在のジェネリック型パラメータ共変性および特殊な制約説明する GenericParameterAttributes フラグ組み合わせ取得します。 ( Type から継承されます。)
パブリック プロパティ GenericParameterPosition オーバーライドされますパラメータ宣言したジェネリック型またはジェネリック メソッド型パラメータ リスト内の型パラメータ位置取得します
パブリック プロパティ GUID オーバーライドされます不完全なジェネリック型パラメータではサポートされていません。
パブリック プロパティ HasElementType  現在の Type別の型を包含または参照しているかどうか、つまり現在の Type配列ポインタ、または参照渡しかどうかを示す値を取得します。 ( Type から継承されます。)
パブリック プロパティ IsAbstract  Type抽象型で、オーバーライドする必要があるかどうかを示す値を取得します。 ( Type から継承されます。)
パブリック プロパティ IsAnsiClass  Type に、文字列書式属性として AnsiClass選択されているかどうかを示す値を取得します。 ( Type から継承されます。)
パブリック プロパティ IsArray  Type配列かどうかを示す値を取得します。 ( Type から継承されます。)
パブリック プロパティ IsAutoClass  Type に、文字列書式属性として AutoClass選択されているかどうかを示す値を取得します。 ( Type から継承されます。)
パブリック プロパティ IsAutoLayout  Type に、クラスレイアウト属性として AutoLayout選択されているかどうかを示す値を取得します。 ( Type から継承されます。)
パブリック プロパティ IsByRef  Type参照渡しかどうかを示す値を取得します。 ( Type から継承されます。)
パブリック プロパティ IsClass  Typeクラスであり、値型インターフェイスでないかどうかを示す値を取得します。 ( Type から継承されます。)
パブリック プロパティ IsCOMObject  TypeCOM オブジェクトかどうかを示す値を取得します。 ( Type から継承されます。)
パブリック プロパティ IsContextful  Typeコンテキスト内で管理できるかどうかを示す値を取得します。 ( Type から継承されます。)
パブリック プロパティ IsEnum  現在の Type列挙体であるどうかを示す値を取得します。 ( Type から継承されます。)
パブリック プロパティ IsExplicitLayout  Type に、クラスレイアウト属性として ExplicitLayout選択されているかどうかを示す値を取得します。 ( Type から継承されます。)
パブリック プロパティ IsGenericParameter オーバーライドされます。 常に true取得します
パブリック プロパティ IsGenericType オーバーライドされます。 常に false返します
パブリック プロパティ IsGenericTypeDefinition オーバーライドされます。 常に false取得します
パブリック プロパティ IsImport  Type が ComImportAttribute 属性持っているかどうかを示す (つまり、COM タイプ ライブラリからインポートされたかどうかを示す) 値を取得します。 ( Type から継承されます。)
パブリック プロパティ IsInterface  Typeインターフェイスであり、クラス値型でないかどうかを示す値を取得します。 ( Type から継承されます。)
パブリック プロパティ IsLayoutSequential  Type に、クラスレイアウト属性として SequentialLayout選択されているかどうかを示す値を取得します。 ( Type から継承されます。)
パブリック プロパティ IsMarshalByRef  Type参照渡しマーシャリングされるかどうかを示す値を取得します。 ( Type から継承されます。)
パブリック プロパティ IsNested  現在の Type オブジェクトが、別の型の定義内に入れ子になっている定義で定義された型を表しているかどうかを示す値を取得します。 ( Type から継承されます。)
パブリック プロパティ IsNestedAssembly  Type入れ子になっていて、それ自体属すアセンブリ内でだけ参照可能かどうかを示す値を取得します。 ( Type から継承されます。)
パブリック プロパティ IsNestedFamANDAssem  Type入れ子になっていて、それ自体属すファミリアセンブリ両方属しているクラスだけから参照可能かどうかを示す値を取得します。 ( Type から継承されます。)
パブリック プロパティ IsNestedFamily  Type入れ子になっていて、それ自体属すファミリ内でだけ参照可能かどうかを示す値を取得します。 ( Type から継承されます。)
パブリック プロパティ IsNestedFamORAssem  Type入れ子になっていて、それ自体属すファミリまたはアセンブリいずれかに属しているクラスだけから参照可能かどうかを示す値を取得します。 ( Type から継承されます。)
パブリック プロパティ IsNestedPrivate  Type入れ子になっていて、プライベートとして宣言されているかどうかを示す値を取得します。 ( Type から継承されます。)
パブリック プロパティ IsNestedPublic  クラス入れ子になっていて、パブリックとして宣言されているかどうかを示す値を取得します。 ( Type から継承されます。)
パブリック プロパティ IsNotPublic  Typeパブリックとして宣言されていないかどうかを示す値を取得します。 ( Type から継承されます。)
パブリック プロパティ IsPointer  Typeポインタかどうかを示す値を取得します。 ( Type から継承されます。)
パブリック プロパティ IsPrimitive  Typeプリミティブ型1 つかどうかを示す値を取得します。 ( Type から継承されます。)
パブリック プロパティ IsPublic  Typeパブリックとして宣言されているかどうかを示す値を取得します。 ( Type から継承されます。)
パブリック プロパティ IsSealed  Typesealed として宣言されているかどうかを示す値を取得します。 ( Type から継承されます。)
パブリック プロパティ IsSerializable  Typeシリアル化できるかどうかを示す値を取得します。 ( Type から継承されます。)
パブリック プロパティ IsSpecialName  Type の名前が特別な処理を必要とするかどうかを示す値を取得します。 ( Type から継承されます。)
パブリック プロパティ IsUnicodeClass  Type に、文字列書式属性として UnicodeClass選択されているかどうかを示す値を取得します。 ( Type から継承されます。)
パブリック プロパティ IsValueType  Type値型かどうかを示す値を取得します。 ( Type から継承されます。)
パブリック プロパティ IsVisible  Typeアセンブリ外側コードからアクセスできるかどうかを示す値を取得します。 ( Type から継承されます。)
パブリック プロパティ MemberType  このメンバが型であるか、または入れ子にされた型であるかを示す MemberTypes 値を取得します。 ( Type から継承されます。)
パブリック プロパティ MetadataToken  メタデータ要素識別する値を取得します。 ( MemberInfo から継承されます。)
パブリック プロパティ Module オーバーライドされますジェネリック型パラメータ格納する動的モジュール取得します
パブリック プロパティ Name オーバーライドされますジェネリック型パラメータの名前を取得します
パブリック プロパティ Namespace オーバーライドされます。 常に null 参照 (Visual Basic では Nothing) を取得します
パブリック プロパティ ReflectedType オーバーライドされますGenericTypeParameterBuilder取得するために使用した Type オブジェクト取得します
パブリック プロパティ StructLayoutAttribute  現在の型のレイアウト説明する StructLayoutAttribute を取得します。 ( Type から継承されます。)
パブリック プロパティ TypeHandle オーバーライドされます不完全なジェネリック型パラメータではサポートされていません。
パブリック プロパティ TypeInitializer  Typeクラス初期化子取得します。 ( Type から継承されます。)
パブリック プロパティ UnderlyingSystemType オーバーライドされます不完全なジェネリック型パラメータには有効ではありません。
参照参照

関連項目

GenericTypeParameterBuilder クラス
System.Reflection.Emit 名前空間
TypeBuilder.DefineGenericParameters

その他の技術情報

方法 : リフレクション出力使用してジェネリック型定義する

GenericTypeParameterBuilder メソッド


パブリック メソッドパブリック メソッド

  名前 説明
パブリック メソッド Equals オーバーロードされますオーバーライドされます2 つオブジェクト等しかどうか比較します。
パブリック メソッド FindInterfaces  現在の Type によって実装または継承されているインターフェイスフィルタ適用済みリストを表す、Type オブジェクト配列返します。 ( Type から継承されます。)
パブリック メソッド FindMembers  指定したメンバ型の MemberInfo オブジェクト配列フィルタ適用して返します。 ( Type から継承されます。)
パブリック メソッド GetArrayRank  Array次元数を取得します。 ( Type から継承されます。)
パブリック メソッド GetConstructor  オーバーロードされます現在の Type特定のコンストラクタ取得します。 ( Type から継承されます。)
パブリック メソッド GetConstructors オーバーロードされます不完全なジェネリック型パラメータではサポートされていません。
パブリック メソッド GetCustomAttributes オーバーロードされますオーバーライドされます不完全なジェネリック型パラメータではサポートされていません。
パブリック メソッド GetDefaultMembers  DefaultMemberAttribute が設定されている現在の Type定義されているメンバ検索します。 ( Type から継承されます。)
パブリック メソッド GetElementType オーバーライドされます。 常に null 参照 (Visual Basic では Nothing) を返します
パブリック メソッド GetEvent オーバーロードされます不完全なジェネリック型パラメータではサポートされていません。
パブリック メソッド GetEvents オーバーロードされますオーバーライドされます不完全なジェネリック型パラメータではサポートされていません。
パブリック メソッド GetField オーバーロードされます不完全なジェネリック型パラメータではサポートされていません。
パブリック メソッド GetFields オーバーロードされます不完全なジェネリック型パラメータではサポートされていません。
パブリック メソッド GetGenericArguments オーバーライドされますジェネリック型パラメータには有効ではありません。
パブリック メソッド GetGenericParameterConstraints  現在のジェネリック型パラメータの制約を表す Type オブジェクト返します。 ( Type から継承されます。)
パブリック メソッド GetGenericTypeDefinition オーバーライドされますジェネリック型パラメータには有効ではありません。
パブリック メソッド GetHashCode オーバーライドされます現在のインスタンス32 ビット整数ハッシュ コード返します
パブリック メソッド GetInterface オーバーロードされます不完全なジェネリック型パラメータではサポートされていません。
パブリック メソッド GetInterfaceMap オーバーライドされます不完全なジェネリック型パラメータではサポートされていません。
パブリック メソッド GetInterfaces オーバーライドされます不完全なジェネリック型パラメータではサポートされていません。
パブリック メソッド GetMember オーバーロードされます不完全なジェネリック型パラメータではサポートされていません。
パブリック メソッド GetMembers オーバーロードされます不完全なジェネリック型パラメータではサポートされていません。
パブリック メソッド GetMethod  オーバーロードされます現在の Type特定のメソッド取得します。 ( Type から継承されます。)
パブリック メソッド GetMethods オーバーロードされます不完全なジェネリック型パラメータではサポートされていません。
パブリック メソッド GetNestedType オーバーロードされます不完全なジェネリック型パラメータではサポートされていません。
パブリック メソッド GetNestedTypes オーバーロードされます不完全なジェネリック型パラメータではサポートされていません。
パブリック メソッド GetProperties オーバーロードされます不完全なジェネリック型パラメータではサポートされていません。
パブリック メソッド GetProperty  オーバーロードされます現在の Type特定のプロパティ取得します。 ( Type から継承されます。)
パブリック メソッド GetType  オーバーロードされます指定された型を表す Type オブジェクト取得します。 ( Type から継承されます。)
パブリック メソッド GetTypeArray  指定した配列内のオブジェクトの型を取得します。 ( Type から継承されます。)
パブリック メソッド GetTypeCode  指定した Type の基になる型コード取得します。 ( Type から継承されます。)
パブリック メソッド GetTypeFromCLSID  オーバーロードされます指定したクラス ID (CLSID) に関連付けられている型を取得します。 ( Type から継承されます。)
パブリック メソッド GetTypeFromHandle  指定したハンドルによって参照される型を取得します。 ( Type から継承されます。)
パブリック メソッド GetTypeFromProgID  オーバーロードされます指定したプログラム ID (ProgID) に関連付けられている型を取得します。 ( Type から継承されます。)
パブリック メソッド GetTypeHandle  指定したオブジェクトTypeハンドル取得します。 ( Type から継承されます。)
パブリック メソッド InvokeMember オーバーロードされますジェネリック型パラメータではサポートされていません。
パブリック メソッド IsAssignableFrom オーバーライドされます不完全なジェネリック型パラメータではサポートされていません。
パブリック メソッド IsDefined オーバーライドされます不完全なジェネリック型パラメータではサポートされていません。
パブリック メソッド IsInstanceOfType  指定したオブジェクト現在の Typeインスタンスかどうかを判断します。 ( Type から継承されます。)
パブリック メソッド IsSubclassOf オーバーライドされます不完全なジェネリック型パラメータではサポートされていません。
パブリック メソッド MakeArrayType オーバーロードされますオーバーライドされます要素型がジェネリック型パラメータである配列の型を返します
パブリック メソッド MakeByRefType オーバーライドされます参照パラメータとして渡されるときに、現在のジェネリック型パラメータを表す Type オブジェクト返します
パブリック メソッド MakeGenericType オーバーライドされます不完全なジェネリック型パラメータには有効ではありません。
パブリック メソッド MakePointerType オーバーライドされます現在のジェネリック型パラメータへのポインタを表す Type オブジェクト返します
パブリック メソッド ReferenceEquals  指定した複数Object インスタンス同一かどうか判断します。 ( Object から継承されます。)
パブリック メソッド ReflectionOnlyGetType  大文字と小文字区別する検索実行し、型が見つからない場合例外スローするかどうか指定して指定した名前の Type取得します。型は実行ではなくリフレクションのためだけに読み込まれます。 ( Type から継承されます。)
パブリック メソッド SetBaseTypeConstraint 型パラメータ置き換えるために、型が継承する必要のある基本型設定します
パブリック メソッド SetCustomAttribute オーバーロードされますカスタム属性設定します
パブリック メソッド SetGenericParameterAttributes パラメータなしのコンストラクタの制約など、ジェネリック パラメータ分散特性特殊な制約設定します
パブリック メソッド SetInterfaceConstraints 型パラメータ置き換えるために、型が実装する必要のあるインターフェイス設定します
パブリック メソッド ToString オーバーライドされます不完全なジェネリック型パラメータではサポートされていません。
参照参照

関連項目

GenericTypeParameterBuilder クラス
System.Reflection.Emit 名前空間
TypeBuilder.DefineGenericParameters

その他の技術情報

方法 : リフレクション出力使用してジェネリック型定義する

GenericTypeParameterBuilder メンバ

動的に定義されジェネリック型およびジェネリック メソッドジェネリック型パラメータを定義および作成します。このクラス継承できません。

GenericTypeParameterBuilder データ型公開されるメンバを以下の表に示します


パブリック プロパティパブリック プロパティ
  名前 説明
パブリック プロパティ Assembly オーバーライドされます現在の型パラメータ属すジェネリック型の定義を格納する動的アセンブリを表す Assembly オブジェクト取得します
パブリック プロパティ AssemblyQualifiedName オーバーライドされます。 常に null 参照 (Visual Basic では Nothing) を取得します
パブリック プロパティ Attributes  Type関連付けられている属性取得します。(Type から継承されます。)
パブリック プロパティ BaseType オーバーライドされます現在のジェネリック型パラメータ基本型制約取得します
パブリック プロパティ ContainsGenericParameters オーバーライドされます。 常に false取得します
パブリック プロパティ DeclaringMethod オーバーライドされます現在の GenericTypeParameterBuilder がジェネリック メソッド型パラメータ表している場合に、宣言するメソッドを表す MethodInfo を取得します
パブリック プロパティ DeclaringType オーバーライドされますジェネリック型パラメータ属すジェネリック型の定義、またはジェネリック メソッドの定義を取得します
パブリック プロパティ DefaultBinder  既定バインダへの参照取得します。このバインダは、InvokeMember によって呼び出される適切なメンバ選択するための内部規則実装ます。(Type から継承されます。)
パブリック プロパティ FullName オーバーライドされます。 常に null 参照 (Visual Basic では Nothing) を取得します
パブリック プロパティ GenericParameterAttributes  現在のジェネリック型パラメータ共変性および特殊な制約説明する GenericParameterAttributes フラグ組み合わせ取得します。 (Type から継承されます。)
パブリック プロパティ GenericParameterPosition オーバーライドされますパラメータ宣言したジェネリック型またはジェネリック メソッド型パラメータ リスト内の型パラメータ位置取得します
パブリック プロパティ GUID オーバーライドされます不完全なジェネリック型パラメータではサポートされていません。
パブリック プロパティ HasElementType  現在の Type別の型を包含または参照しているかどうか、つまり現在の Type配列ポインタ、または参照渡しかどうかを示す値を取得します。(Type から継承されます。)
パブリック プロパティ IsAbstract  Type抽象型で、オーバーライドする必要があるかどうかを示す値を取得します。(Type から継承されます。)
パブリック プロパティ IsAnsiClass  Type に、文字列書式属性として AnsiClass選択されているかどうかを示す値を取得します。(Type から継承されます。)
パブリック プロパティ IsArray  Type配列かどうかを示す値を取得します。(Type から継承されます。)
パブリック プロパティ IsAutoClass  Type に、文字列書式属性として AutoClass選択されているかどうかを示す値を取得します。(Type から継承されます。)
パブリック プロパティ IsAutoLayout  Type に、クラスレイアウト属性として AutoLayout選択されているかどうかを示す値を取得します。(Type から継承されます。)
パブリック プロパティ IsByRef  Type参照渡しかどうかを示す値を取得します。(Type から継承されます。)
パブリック プロパティ IsClass  Typeクラスであり、値型インターフェイスでないかどうかを示す値を取得します。(Type から継承されます。)
パブリック プロパティ IsCOMObject  TypeCOM オブジェクトかどうかを示す値を取得します。(Type から継承されます。)
パブリック プロパティ IsContextful  Typeコンテキスト内で管理できるかどうかを示す値を取得します。(Type から継承されます。)
パブリック プロパティ IsEnum  現在の Type列挙体であるどうかを示す値を取得します。(Type から継承されます。)
パブリック プロパティ IsExplicitLayout  Type に、クラスレイアウト属性として ExplicitLayout選択されているかどうかを示す値を取得します。(Type から継承されます。)
パブリック プロパティ IsGenericParameter オーバーライドされます。 常に true取得します
パブリック プロパティ IsGenericType オーバーライドされます。 常に false返します
パブリック プロパティ IsGenericTypeDefinition オーバーライドされます。 常に false取得します
パブリック プロパティ IsImport  Type が ComImportAttribute 属性持っているかどうかを示す (つまり、COM タイプ ライブラリからインポートされたかどうかを示す) 値を取得します。(Type から継承されます。)
パブリック プロパティ IsInterface  Typeインターフェイスであり、クラス値型でないかどうかを示す値を取得します。(Type から継承されます。)
パブリック プロパティ IsLayoutSequential  Type に、クラスレイアウト属性として SequentialLayout選択されているかどうかを示す値を取得します。(Type から継承されます。)
パブリック プロパティ IsMarshalByRef  Type参照渡しマーシャリングされるかどうかを示す値を取得します。(Type から継承されます。)
パブリック プロパティ IsNested  現在の Type オブジェクトが、別の型の定義内に入れ子になっている定義で定義された型を表しているかどうかを示す値を取得します。(Type から継承されます。)
パブリック プロパティ IsNestedAssembly  Type入れ子になっていて、それ自体属すアセンブリ内でだけ参照可能かどうかを示す値を取得します。(Type から継承されます。)
パブリック プロパティ IsNestedFamANDAssem  Type入れ子になっていて、それ自体属すファミリアセンブリ両方属しているクラスだけから参照可能かどうかを示す値を取得します。(Type から継承されます。)
パブリック プロパティ IsNestedFamily  Type入れ子になっていて、それ自体属すファミリ内でだけ参照可能かどうかを示す値を取得します。(Type から継承されます。)
パブリック プロパティ IsNestedFamORAssem  Type入れ子になっていて、それ自体属すファミリまたはアセンブリいずれかに属しているクラスだけから参照可能かどうかを示す値を取得します。(Type から継承されます。)
パブリック プロパティ IsNestedPrivate  Type入れ子になっていて、プライベートとして宣言されているかどうかを示す値を取得します。(Type から継承されます。)
パブリック プロパティ IsNestedPublic  クラス入れ子になっていて、パブリックとして宣言されているかどうかを示す値を取得します。(Type から継承されます。)
パブリック プロパティ IsNotPublic  Typeパブリックとして宣言されていないかどうかを示す値を取得します。(Type から継承されます。)
パブリック プロパティ IsPointer  Typeポインタかどうかを示す値を取得します。(Type から継承されます。)
パブリック プロパティ IsPrimitive  Typeプリミティブ型1 つかどうかを示す値を取得します。(Type から継承されます。)
パブリック プロパティ IsPublic  Typeパブリックとして宣言されているかどうかを示す値を取得します。(Type から継承されます。)
パブリック プロパティ IsSealed  Typesealed として宣言されているかどうかを示す値を取得します。(Type から継承されます。)
パブリック プロパティ IsSerializable  Typeシリアル化できるかどうかを示す値を取得します。(Type から継承されます。)
パブリック プロパティ IsSpecialName  Type の名前が特別な処理を必要とするかどうかを示す値を取得します。(Type から継承されます。)
パブリック プロパティ IsUnicodeClass  Type に、文字列書式属性として UnicodeClass選択されているかどうかを示す値を取得します。(Type から継承されます。)
パブリック プロパティ IsValueType  Type値型かどうかを示す値を取得します。(Type から継承されます。)
パブリック プロパティ IsVisible  Typeアセンブリ外側コードからアクセスできるかどうかを示す値を取得します。(Type から継承されます。)
パブリック プロパティ MemberType  このメンバが型であるか、または入れ子にされた型であるかを示す MemberTypes 値を取得します。(Type から継承されます。)
パブリック プロパティ MetadataToken  メタデータ要素識別する値を取得します。(MemberInfo から継承されます。)
パブリック プロパティ Module オーバーライドされますジェネリック型パラメータ格納する動的モジュール取得します
パブリック プロパティ Name オーバーライドされますジェネリック型パラメータの名前を取得します
パブリック プロパティ Namespace オーバーライドされます。 常に null 参照 (Visual Basic では Nothing) を取得します
パブリック プロパティ ReflectedType オーバーライドされますGenericTypeParameterBuilder取得するために使用した Type オブジェクト取得します
パブリック プロパティ StructLayoutAttribute  現在の型のレイアウト説明する StructLayoutAttribute を取得します。(Type から継承されます。)
パブリック プロパティ TypeHandle オーバーライドされます不完全なジェネリック型パラメータではサポートされていません。
パブリック プロパティ TypeInitializer  Typeクラス初期化子取得します。(Type から継承されます。)
パブリック プロパティ UnderlyingSystemType オーバーライドされます不完全なジェネリック型パラメータには有効ではありません。
パブリック メソッドパブリック メソッド
  名前 説明
パブリック メソッド Equals オーバーロードされますオーバーライドされます2 つオブジェクト等しかどうか比較します。
パブリック メソッド FindInterfaces  現在の Type によって実装または継承されているインターフェイスフィルタ適用済みリストを表す、Type オブジェクト配列返します。 (Type から継承されます。)
パブリック メソッド FindMembers  指定したメンバ型の MemberInfo オブジェクト配列フィルタ適用して返します。 (Type から継承されます。)
パブリック メソッド GetArrayRank  Array次元数を取得します。 (Type から継承されます。)
パブリック メソッド GetConstructor  オーバーロードされます現在の Type特定のコンストラクタ取得します。 (Type から継承されます。)
パブリック メソッド GetConstructors オーバーロードされます不完全なジェネリック型パラメータではサポートされていません。
パブリック メソッド GetCustomAttributes オーバーロードされますオーバーライドされます不完全なジェネリック型パラメータではサポートされていません。
パブリック メソッド GetDefaultMembers  DefaultMemberAttribute が設定されている現在の Type定義されているメンバ検索します。 (Type から継承されます。)
パブリック メソッド GetElementType オーバーライドされます。 常に null 参照 (Visual Basic では Nothing) を返します
パブリック メソッド GetEvent オーバーロードされます不完全なジェネリック型パラメータではサポートされていません。
パブリック メソッド GetEvents オーバーロードされますオーバーライドされます不完全なジェネリック型パラメータではサポートされていません。
パブリック メソッド GetField オーバーロードされます不完全なジェネリック型パラメータではサポートされていません。
パブリック メソッド GetFields オーバーロードされます不完全なジェネリック型パラメータではサポートされていません。
パブリック メソッド GetGenericArguments オーバーライドされますジェネリック型パラメータには有効ではありません。
パブリック メソッド GetGenericParameterConstraints  現在のジェネリック型パラメータの制約を表す Type オブジェクト返します。 (Type から継承されます。)
パブリック メソッド GetGenericTypeDefinition オーバーライドされますジェネリック型パラメータには有効ではありません。
パブリック メソッド GetHashCode オーバーライドされます現在のインスタンス32 ビット整数ハッシュ コード返します
パブリック メソッド GetInterface オーバーロードされます不完全なジェネリック型パラメータではサポートされていません。
パブリック メソッド GetInterfaceMap オーバーライドされます不完全なジェネリック型パラメータではサポートされていません。
パブリック メソッド GetInterfaces オーバーライドされます不完全なジェネリック型パラメータではサポートされていません。
パブリック メソッド GetMember オーバーロードされます不完全なジェネリック型パラメータではサポートされていません。
パブリック メソッド GetMembers オーバーロードされます不完全なジェネリック型パラメータではサポートされていません。
パブリック メソッド GetMethod  オーバーロードされます現在の Type特定のメソッド取得します。 (Type から継承されます。)
パブリック メソッド GetMethods オーバーロードされます不完全なジェネリック型パラメータではサポートされていません。
パブリック メソッド GetNestedType オーバーロードされます不完全なジェネリック型パラメータではサポートされていません。
パブリック メソッド GetNestedTypes オーバーロードされます不完全なジェネリック型パラメータではサポートされていません。
パブリック メソッド GetProperties オーバーロードされます不完全なジェネリック型パラメータではサポートされていません。
パブリック メソッド GetProperty  オーバーロードされます現在の Type特定のプロパティ取得します。 (Type から継承されます。)
パブリック メソッド GetType  オーバーロードされます指定された型を表す Type オブジェクト取得します。 (Type から継承されます。)
パブリック メソッド GetTypeArray  指定した配列内のオブジェクトの型を取得します。 (Type から継承されます。)
パブリック メソッド GetTypeCode  指定した Type の基になる型コード取得します。 (Type から継承されます。)
パブリック メソッド GetTypeFromCLSID  オーバーロードされます指定したクラス ID (CLSID) に関連付けられている型を取得します。 (Type から継承されます。)
パブリック メソッド GetTypeFromHandle  指定したハンドルによって参照される型を取得します。 (Type から継承されます。)
パブリック メソッド GetTypeFromProgID  オーバーロードされます指定したプログラム ID (ProgID) に関連付けられている型を取得します。 (Type から継承されます。)
パブリック メソッド GetTypeHandle  指定したオブジェクトTypeハンドル取得します。 (Type から継承されます。)
パブリック メソッド InvokeMember オーバーロードされますジェネリック型パラメータではサポートされていません。
パブリック メソッド IsAssignableFrom オーバーライドされます不完全なジェネリック型パラメータではサポートされていません。
パブリック メソッド IsDefined オーバーライドされます不完全なジェネリック型パラメータではサポートされていません。
パブリック メソッド IsInstanceOfType  指定したオブジェクト現在の Typeインスタンスかどうかを判断します。 (Type から継承されます。)
パブリック メソッド IsSubclassOf オーバーライドされます不完全なジェネリック型パラメータではサポートされていません。
パブリック メソッド MakeArrayType オーバーロードされますオーバーライドされます要素型がジェネリック型パラメータである配列の型を返します
パブリック メソッド MakeByRefType オーバーライドされます参照パラメータとして渡されるときに、現在のジェネリック型パラメータを表す Type オブジェクト返します
パブリック メソッド MakeGenericType オーバーライドされます不完全なジェネリック型パラメータには有効ではありません。
パブリック メソッド MakePointerType オーバーライドされます現在のジェネリック型パラメータへのポインタを表す Type オブジェクト返します
パブリック メソッド ReferenceEquals  指定した複数Object インスタンス同一かどうか判断します。 (Object から継承されます。)
パブリック メソッド ReflectionOnlyGetType  大文字と小文字区別する検索実行し、型が見つからない場合例外スローするかどうか指定して指定した名前の Type取得します。型は実行ではなくリフレクションのためだけに読み込まれます。 (Type から継承されます。)
パブリック メソッド SetBaseTypeConstraint 型パラメータ置き換えるために、型が継承する必要のある基本型設定します
パブリック メソッド SetCustomAttribute オーバーロードされますカスタム属性設定します
パブリック メソッド SetGenericParameterAttributes パラメータなしのコンストラクタの制約など、ジェネリック パラメータ分散特性特殊な制約設定します
パブリック メソッド SetInterfaceConstraints 型パラメータ置き換えるために、型が実装する必要のあるインターフェイス設定します
パブリック メソッド ToString オーバーライドされます不完全なジェネリック型パラメータではサポートされていません。
参照参照

関連項目

GenericTypeParameterBuilder クラス
System.Reflection.Emit 名前空間
TypeBuilder.DefineGenericParameters

その他の技術情報

方法 : リフレクション出力使用してジェネリック型定義する



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「GenericTypeParameterBuilder」の関連用語

GenericTypeParameterBuilderのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



GenericTypeParameterBuilderのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
日本マイクロソフト株式会社日本マイクロソフト株式会社
© 2025 Microsoft.All rights reserved.

©2025 GRAS Group, Inc.RSS