GenericTypeParameterBuilder Classe

Definição

Define e cria parâmetros de tipo genérico para métodos e tipos genéricos definidos dinamicamente.Defines and creates generic type parameters for dynamically defined generic types and methods. Essa classe não pode ser herdada.This class cannot be inherited.

public ref class GenericTypeParameterBuilder sealed : System::Reflection::TypeInfo
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class GenericTypeParameterBuilder : System.Reflection.TypeInfo
type GenericTypeParameterBuilder = class
    inherit TypeInfo
Public NotInheritable Class GenericTypeParameterBuilder
Inherits TypeInfo
Herança
GenericTypeParameterBuilder
Atributos

Exemplos

O exemplo de código a seguir cria um tipo genérico com dois parâmetros de tipo e salva-os no assembly GenericEmitExample1. dll.The following code example creates a generic type with two type parameters, and saves them in the assembly GenericEmitExample1.dll. Você pode usar o ILDASM. exe (desmontador de Il) para exibir os tipos gerados.You can use the Ildasm.exe (IL Disassembler) to view the generated types. Para obter uma explicação mais detalhada das etapas envolvidas na definição de um tipo genérico dinâmico, consulte Como: definir um tipo genérico com a emissão de reflexão.For a more detailed explanation of the steps involved in defining a dynamic generic type, see How to: Define a Generic Type with Reflection Emit.

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
 */
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
 */
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

Comentários

Você pode obter uma matriz de GenericTypeParameterBuilder objetos usando o método TypeBuilder.DefineGenericParameters para adicionar parâmetros de tipo a um tipo dinâmico, tornando-o um tipo genérico ou usando o MethodBuilder.DefineGenericParameters método para adicionar parâmetros de tipo a um método dinâmico.You can get an array of GenericTypeParameterBuilder objects by using the TypeBuilder.DefineGenericParameters method to add type parameters to a dynamic type, thus making it a generic type, or by using the MethodBuilder.DefineGenericParameters method to add type parameters to a dynamic method. Use os GenericTypeParameterBuilder objetos para adicionar restrições aos parâmetros de tipo.Use the GenericTypeParameterBuilder objects to add constraints to the type parameters. As restrições são de três tipos:Constraints are of three kinds:

  • A restrição de tipo base especifica que qualquer tipo atribuído ao parâmetro de tipo genérico deve derivar de um tipo base específico.The base type constraint specifies that any type assigned to the generic type parameter must derive from a particular base type. Defina essa restrição usando o SetBaseTypeConstraint método.Set this constraint by using the SetBaseTypeConstraint method.

  • Uma restrição de interface especifica que qualquer tipo atribuído ao parâmetro de tipo genérico deve implementar uma interface específica.An interface constraint specifies that any type assigned to the generic type parameter must implement a particular interface. Defina as restrições de interface usando o SetInterfaceConstraints método.Set the interface constraints by using the SetInterfaceConstraints method.

  • Restrições especiais especificam que qualquer tipo atribuído ao parâmetro de tipo genérico deve ter um construtor sem parâmetros, deve ser um tipo de referência ou deve ser um tipo de valor.Special constraints specify that any type assigned to the generic type parameter must have a parameterless constructor, must be a reference type, or must be a value type. Defina as restrições especiais para um parâmetro de tipo usando o SetGenericParameterAttributes método.Set the special constraints for a type parameter by using the SetGenericParameterAttributes method.

Restrições de interface e restrições especiais não podem ser recuperadas usando GenericTypeParameterBuilder métodos da classe.Interface constraints and special constraints cannot be retrieved using methods of the GenericTypeParameterBuilder class. Depois de criar o tipo genérico que contém os parâmetros de tipo, você pode usar seu Type objeto para refletir as restrições.Once you have created the generic type that contains the type parameters, you can use its Type object to reflect the constraints. Use o Type.GetGenericArguments método para obter os parâmetros de tipo e para cada parâmetro de tipo, Type.GetGenericParameterConstraints use o método para obter a restrição de tipo base e as restrições Type.GenericParameterAttributes de interface e a propriedade para obter as restrições especiais.Use the Type.GetGenericArguments method to get the type parameters, and for each type parameter use the Type.GetGenericParameterConstraints method to get the base type constraint and interface constraints, and the Type.GenericParameterAttributes property to get the special constraints.

Propriedades

Assembly

Obtém um objeto Assembly que representa o assembly dinâmico que contém a definição de tipo genérico à qual o parâmetro de tipo atual pertence.Gets an Assembly object representing the dynamic assembly that contains the generic type definition the current type parameter belongs to.

AssemblyQualifiedName

Obtém null em todos os casos.Gets null in all cases.

Attributes
BaseType

Obtém a restrição de tipo base do parâmetro de tipo genérico atual.Gets the base type constraint of the current generic type parameter.

ContainsGenericParameters

Obtém true em todos os casos.Gets true in all cases.

CustomAttributes

Obtém uma coleção que contém os atributos personalizados desse membro.Gets a collection that contains this member's custom attributes.

(Herdado de MemberInfo)
DeclaringMethod

Obtém um MethodInfo que representa o método declarativo, se o GenericTypeParameterBuilder atual representa um parâmetro de tipo de um método genérico.Gets a MethodInfo that represents the declaring method, if the current GenericTypeParameterBuilder represents a type parameter of a generic method.

DeclaringType

Obtém a definição de tipo genérico ou definição de método genérico à qual o parâmetro de tipo genérico pertence.Gets the generic type definition or generic method definition to which the generic type parameter belongs.

FullName

Obtém null em todos os casos.Gets null in all cases.

GenericParameterAttributes

Obtém uma combinação de GenericParameterAttributes sinalizadores que descrevem a covariância e restrições especiais do parâmetro de tipo genérico atual.Gets a combination of GenericParameterAttributes flags that describe the covariance and special constraints of the current generic type parameter.

GenericParameterPosition

Obtém a posição do parâmetro de tipo na lista de parâmetros de tipo do método ou tipo genérico que declarou o parâmetro.Gets the position of the type parameter in the type parameter list of the generic type or method that declared the parameter.

GenericTypeArguments
GUID

Sem suporte para parâmetros de tipo genérico incompletos.Not supported for incomplete generic type parameters.

HasElementType

Obtém um valor que indica se o Type atual abrange ou se refere a outro tipo; ou seja, se o Type atual é uma matriz, um ponteiro ou é passado por referência.Gets a value indicating whether the current Type encompasses or refers to another type; that is, whether the current Type is an array, a pointer, or is passed by reference.

(Herdado de Type)
IsAbstract

Obtém um valor que indica se o Type é abstrato e deve ser substituído.Gets a value indicating whether the Type is abstract and must be overridden.

(Herdado de Type)
IsAnsiClass

Obtém um valor que indica se o atributo de formato da cadeia de caracteres AnsiClass está selecionado para o Type.Gets a value indicating whether the string format attribute AnsiClass is selected for the Type.

(Herdado de Type)
IsArray

Obtém um valor que indica se o tipo é uma matriz.Gets a value that indicates whether the type is an array.

(Herdado de Type)
IsAutoClass

Obtém um valor que indica se o atributo de formato da cadeia de caracteres AutoClass está selecionado para o Type.Gets a value indicating whether the string format attribute AutoClass is selected for the Type.

(Herdado de Type)
IsAutoLayout

Obtém um valor que indica se os campos do tipo atual são apresentados automaticamente pelo Common Language Runtime.Gets a value indicating whether the fields of the current type are laid out automatically by the common language runtime.

(Herdado de Type)
IsByRef

Obtém um valor que indica se o Type é aprovado por referência.Gets a value indicating whether the Type is passed by reference.

(Herdado de Type)
IsByRefLike
IsClass

Obtém um valor que indica se o Type é uma classe ou um delegado; ou seja, não um tipo de valor ou interface.Gets a value indicating whether the Type is a class or a delegate; that is, not a value type or interface.

(Herdado de Type)
IsCollectible

Obtém um valor que indica se este objeto MemberInfo faz parte de um assembly mantido em uma coleção AssemblyLoadContext.Gets a value that indicates whether this MemberInfo object is part of an assembly held in a collectible AssemblyLoadContext.

(Herdado de MemberInfo)
IsCOMObject

Obtém um valor que indica se o Type é um objeto COM.Gets a value indicating whether the Type is a COM object.

(Herdado de Type)
IsConstructedGenericType

Obtém um valor que indica se este objeto representa um tipo genérico construído.Gets a value that indicates whether this object represents a constructed generic type.

IsContextful

Obtém um valor que indica se o Type pode ser hospedado em um contexto.Gets a value indicating whether the Type can be hosted in a context.

(Herdado de Type)
IsEnum
IsExplicitLayout

Obtém um valor que indica se os campos do tipo atual são apresentados em deslocamentos explicitamente especificados.Gets a value indicating whether the fields of the current type are laid out at explicitly specified offsets.

(Herdado de Type)
IsGenericMethodParameter (Herdado de Type)
IsGenericParameter

Obtém true em todos os casos.Gets true in all cases.

IsGenericType

Retorna false em todos os casos.Returns false in all cases.

IsGenericTypeDefinition

Obtém false em todos os casos.Gets false in all cases.

IsGenericTypeParameter (Herdado de Type)
IsImport

Obtém um valor que indica se o Type tem um atributo ComImportAttribute aplicado, indicando que ele foi importado de uma biblioteca de tipos COM.Gets a value indicating whether the Type has a ComImportAttribute attribute applied, indicating that it was imported from a COM type library.

(Herdado de Type)
IsInterface

Obtém um valor que indica se o Type é uma interface, ou seja, não é uma classe ou um tipo de valor.Gets a value indicating whether the Type is an interface; that is, not a class or a value type.

(Herdado de Type)
IsLayoutSequential

Obtém um valor que indica se os campos do tipo atual são apresentados em sequência, na ordem em que foram definidos ou emitidos para os metadados.Gets a value indicating whether the fields of the current type are laid out sequentially, in the order that they were defined or emitted to the metadata.

(Herdado de Type)
IsMarshalByRef

Obtém um valor que indica se é realizado marshal no Type por referência.Gets a value indicating whether the Type is marshaled by reference.

(Herdado de Type)
IsNested

Obtém um valor que indica se o objeto atual Type representa um tipo cuja definição está aninhada dentro da definição de outro tipo.Gets a value indicating whether the current Type object represents a type whose definition is nested inside the definition of another type.

(Herdado de Type)
IsNestedAssembly

Obtém um valor que indica se o Type é aninhado e visível somente dentro de seu próprio assembly.Gets a value indicating whether the Type is nested and visible only within its own assembly.

(Herdado de Type)
IsNestedFamANDAssem

Obtém um valor que indica se o Type é aninhado e visíveis somente para classes que pertencem à sua própria família e ao seu próprio assembly.Gets a value indicating whether the Type is nested and visible only to classes that belong to both its own family and its own assembly.

(Herdado de Type)
IsNestedFamily

Obtém um valor que indica se o Type é aninhado e visível somente dentro de sua própria família.Gets a value indicating whether the Type is nested and visible only within its own family.

(Herdado de Type)
IsNestedFamORAssem

Obtém um valor que indica se o Type é aninhado e visíveis somente para classes que pertençam à sua própria família ou ao seu próprio assembly.Gets a value indicating whether the Type is nested and visible only to classes that belong to either its own family or to its own assembly.

(Herdado de Type)
IsNestedPrivate

Obtém um valor que indica se o Type é aninhado e declarado privado.Gets a value indicating whether the Type is nested and declared private.

(Herdado de Type)
IsNestedPublic

Obtém um valor que indica se uma classe é aninhada e declarada pública.Gets a value indicating whether a class is nested and declared public.

(Herdado de Type)
IsNotPublic

Obtém um valor que indica se o Type não está declarado como público.Gets a value indicating whether the Type is not declared public.

(Herdado de Type)
IsPointer

Obtém um valor que indica se o Type é um ponteiro.Gets a value indicating whether the Type is a pointer.

(Herdado de Type)
IsPrimitive

Obtém um valor que indica se o Type é um dos tipos primitivos.Gets a value indicating whether the Type is one of the primitive types.

(Herdado de Type)
IsPublic

Obtém um valor que indica se o Type está declarado como público.Gets a value indicating whether the Type is declared public.

(Herdado de Type)
IsSealed

Obtém um valor que indica se o Type está declarado selado.Gets a value indicating whether the Type is declared sealed.

(Herdado de Type)
IsSecurityCritical

Obtém um valor que indica se o tipo atual é crítico para segurança ou crítico para segurança e disponível no código transparente no nível de confiança atual e, portanto, pode realizar operações críticas.Gets a value that indicates whether the current type is security-critical or security-safe-critical at the current trust level, and therefore can perform critical operations.

(Herdado de Type)
IsSecuritySafeCritical

Obtém um valor que indica se o tipo é crítico para segurança e disponível no código transparente no nível de confiança atual, ou seja, se ele pode realizar operações críticas e ser acessado por código transparente.Gets a value that indicates whether the current type is security-safe-critical at the current trust level; that is, whether it can perform critical operations and can be accessed by transparent code.

(Herdado de Type)
IsSecurityTransparent

Obtém um valor que indica que se o tipo atual é transparente no nível de confiança atual e, portanto, não pode realizar operações críticas.Gets a value that indicates whether the current type is transparent at the current trust level, and therefore cannot perform critical operations.

(Herdado de Type)
IsSerializable
IsSignatureType (Herdado de Type)
IsSpecialName

Obtém um valor que indica se o tipo tem um nome que exige tratamento especial.Gets a value indicating whether the type has a name that requires special handling.

(Herdado de Type)
IsSZArray
IsTypeDefinition
IsUnicodeClass

Obtém um valor que indica se o atributo de formato da cadeia de caracteres UnicodeClass está selecionado para o Type.Gets a value indicating whether the string format attribute UnicodeClass is selected for the Type.

(Herdado de Type)
IsValueType

Obtém um valor que indica se o Type é um tipo de valor.Gets a value indicating whether the Type is a value type.

(Herdado de Type)
IsVariableBoundArray
IsVisible

Obtém um valor que indica se Type pode ser acessado pelo código fora do assembly.Gets a value indicating whether the Type can be accessed by code outside the assembly.

(Herdado de Type)
MemberType

Obtém um valor MemberTypes que indica que esse membro é um tipo ou um tipo aninhado.Gets a MemberTypes value indicating that this member is a type or a nested type.

(Herdado de Type)
MetadataToken

Obtém um valor que identifica um elemento de metadados.Gets a value that identifies a metadata element.

(Herdado de MemberInfo)
Module

Obtém o módulo dinâmico que contém o parâmetro de tipo genérico.Gets the dynamic module that contains the generic type parameter.

Name

Obtém o nome do parâmetro de tipo genérico.Gets the name of the generic type parameter.

Namespace

Obtém null em todos os casos.Gets null in all cases.

ReflectedType

Obtém o objeto Type que foi usado para obter o GenericTypeParameterBuilder.Gets the Type object that was used to obtain the GenericTypeParameterBuilder.

StructLayoutAttribute

Obtém um StructLayoutAttribute que descreve o layout do tipo atual.Gets a StructLayoutAttribute that describes the layout of the current type.

(Herdado de Type)
TypeHandle

Sem suporte para parâmetros de tipo genérico incompletos.Not supported for incomplete generic type parameters.

TypeInitializer

Obtém o inicializador para o tipo.Gets the initializer for the type.

(Herdado de Type)
UnderlyingSystemType

Obtém o parâmetro de tipo genérico atual.Gets the current generic type parameter.

Métodos

Equals(Object)

Testa se o objeto fornecido é uma instância de EventToken e é igual à instância atual.Tests whether the given object is an instance of EventToken and is equal to the current instance.

Equals(Type)

Determina se o tipo de sistema subjacente do Type atual é o mesmo que o tipo de sistema subjacente do Type especificado.Determines if the underlying system type of the current Type is the same as the underlying system type of the specified Type.

(Herdado de Type)
FindInterfaces(TypeFilter, Object)

Retorna uma matriz de objetos Type que representa uma lista filtrada das interfaces implementadas ou herdadas pelo Type atual.Returns an array of Type objects representing a filtered list of interfaces implemented or inherited by the current Type.

(Herdado de Type)
FindMembers(MemberTypes, BindingFlags, MemberFilter, Object)

Retorna uma matriz filtrada de objetos MemberInfo do tipo do membro especificado.Returns a filtered array of MemberInfo objects of the specified member type.

(Herdado de Type)
GetArrayRank()
GetAttributeFlagsImpl()

Quando substituído em uma classe derivada, implementa a propriedade Attributes e obtém uma combinação bit a bit dos valores de enumeração que indicam os atributos associados ao Type.When overridden in a derived class, implements the Attributes property and gets a bitwise combination of enumeration values that indicate the attributes associated with the Type.

(Herdado de Type)
GetConstructor(BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])

Pesquisa por um construtor cujos parâmetros correspondem aos tipos de argumento e modificadores especificados, usando as restrições de associação especificadas e a convenção de chamada especificada.Searches for a constructor whose parameters match the specified argument types and modifiers, using the specified binding constraints and the specified calling convention.

(Herdado de Type)
GetConstructor(BindingFlags, Binder, Type[], ParameterModifier[])

Pesquisa o construtor cujos parâmetros correspondem aos tipos de argumento e modificadores especificados, usando as restrições de associação especificadas.Searches for a constructor whose parameters match the specified argument types and modifiers, using the specified binding constraints.

(Herdado de Type)
GetConstructor(Type[])

Pesquisa um construtor de instância pública cujos parâmetros correspondem aos tipos na matriz especificada.Searches for a public instance constructor whose parameters match the types in the specified array.

(Herdado de Type)
GetConstructorImpl(BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])

Quando substituído em uma classe derivada, pesquisa por um construtor cujos parâmetros correspondem aos tipos de argumento e modificadores especificados, usando as restrições de associação especificadas e a convenção de chamada especificada.When overridden in a derived class, searches for a constructor whose parameters match the specified argument types and modifiers, using the specified binding constraints and the specified calling convention.

(Herdado de Type)
GetConstructors()

Retorna todos os construtores públicos definidos para o Type atual.Returns all the public constructors defined for the current Type.

(Herdado de Type)
GetConstructors(BindingFlags)

Sem suporte para parâmetros de tipo genérico incompletos.Not supported for incomplete generic type parameters.

GetCustomAttributes(Boolean)

Sem suporte para parâmetros de tipo genérico incompletos.Not supported for incomplete generic type parameters.

GetCustomAttributes(Type, Boolean)

Sem suporte para parâmetros de tipo genérico incompletos.Not supported for incomplete generic type parameters.

GetCustomAttributesData()

Retorna uma lista de objetos CustomAttributeData que representam dados sobre os atributos que foram aplicados ao membro de destino.Returns a list of CustomAttributeData objects representing data about the attributes that have been applied to the target member.

(Herdado de MemberInfo)
GetDefaultMembers()

Procura os membros definidos para o Type atual, cujo DefaultMemberAttribute está definido.Searches for the members defined for the current Type whose DefaultMemberAttribute is set.

(Herdado de Type)
GetElementType()

Gera um NotSupportedException em todos os casos.Throws a NotSupportedException in all cases.

GetEnumName(Object)

Retorna o nome da constante que tem o valor especificado para o tipo de enumeração atual.Returns the name of the constant that has the specified value, for the current enumeration type.

(Herdado de Type)
GetEnumNames()

Retorna os nomes dos membros do tipo de enumeração atual.Returns the names of the members of the current enumeration type.

(Herdado de Type)
GetEnumUnderlyingType()

Retorna o tipo subjacente do tipo de enumeração atual.Returns the underlying type of the current enumeration type.

(Herdado de Type)
GetEnumValues()

Retorna uma matriz de valores das constantes no tipo de enumeração especificado.Returns an array of the values of the constants in the current enumeration type.

(Herdado de Type)
GetEvent(String)

Retorna o objeto EventInfo que representa o evento público especificado.Returns the EventInfo object representing the specified public event.

(Herdado de Type)
GetEvent(String, BindingFlags)

Sem suporte para parâmetros de tipo genérico incompletos.Not supported for incomplete generic type parameters.

GetEvents()

Sem suporte para parâmetros de tipo genérico incompletos.Not supported for incomplete generic type parameters.

GetEvents(BindingFlags)

Sem suporte para parâmetros de tipo genérico incompletos.Not supported for incomplete generic type parameters.

GetField(String)

Pesquisa o campo público com o nome especificado.Searches for the public field with the specified name.

(Herdado de Type)
GetField(String, BindingFlags)

Sem suporte para parâmetros de tipo genérico incompletos.Not supported for incomplete generic type parameters.

GetFields()

Retorna todos os campos públicos do Type atual.Returns all the public fields of the current Type.

(Herdado de Type)
GetFields(BindingFlags)

Sem suporte para parâmetros de tipo genérico incompletos.Not supported for incomplete generic type parameters.

GetGenericArguments()

Não é válido para parâmetros de tipo genérico.Not valid for generic type parameters.

GetGenericParameterConstraints()
GetGenericTypeDefinition()

Não é válido para parâmetros de tipo genérico.Not valid for generic type parameters.

GetHashCode()

Retorna um código hash de inteiro de 32 bits para a instância atual.Returns a 32-bit integer hash code for the current instance.

GetInterface(String)

Pesquisa a interface com o nome especificado.Searches for the interface with the specified name.

(Herdado de Type)
GetInterface(String, Boolean)

Sem suporte para parâmetros de tipo genérico incompletos.Not supported for incomplete generic type parameters.

GetInterfaceMap(Type)

Sem suporte para parâmetros de tipo genérico incompletos.Not supported for incomplete generic type parameters.

GetInterfaces()

Sem suporte para parâmetros de tipo genérico incompletos.Not supported for incomplete generic type parameters.

GetMember(String)

Pesquisa a propriedade pública com o nome especificado.Searches for the public members with the specified name.

(Herdado de Type)
GetMember(String, BindingFlags)

Pesquisa os membros especificados usando as restrições de associação especificadas.Searches for the specified members, using the specified binding constraints.

(Herdado de Type)
GetMember(String, MemberTypes, BindingFlags)

Sem suporte para parâmetros de tipo genérico incompletos.Not supported for incomplete generic type parameters.

GetMembers()

Retorna todos os membros públicos do Type atual.Returns all the public members of the current Type.

(Herdado de Type)
GetMembers(BindingFlags)

Sem suporte para parâmetros de tipo genérico incompletos.Not supported for incomplete generic type parameters.

GetMethod(String)

Pesquisa o método público com o nome especificado.Searches for the public method with the specified name.

(Herdado de Type)
GetMethod(String, BindingFlags)

Pesquisa o método especificado, usando as restrições de associação especificadas.Searches for the specified method, using the specified binding constraints.

(Herdado de Type)
GetMethod(String, BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])

Pesquisa o método especificado cujos parâmetros correspondem aos tipos de argumento e modificadores especificados, usando as restrições de associação especificadas e a convenção de chamada especificada.Searches for the specified method whose parameters match the specified argument types and modifiers, using the specified binding constraints and the specified calling convention.

(Herdado de Type)
GetMethod(String, BindingFlags, Binder, Type[], ParameterModifier[])

Pesquisa o método especificado cujos parâmetros correspondem aos tipos de argumento e modificadores especificados, usando as restrições de associação especificadas.Searches for the specified method whose parameters match the specified argument types and modifiers, using the specified binding constraints.

(Herdado de Type)
GetMethod(String, Int32, BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[]) (Herdado de Type)
GetMethod(String, Int32, BindingFlags, Binder, Type[], ParameterModifier[]) (Herdado de Type)
GetMethod(String, Int32, Type[]) (Herdado de Type)
GetMethod(String, Int32, Type[], ParameterModifier[]) (Herdado de Type)
GetMethod(String, Type[])

Pesquisa o método público especificado cujos parâmetros correspondem aos tipos de argumento especificados.Searches for the specified public method whose parameters match the specified argument types.

(Herdado de Type)
GetMethod(String, Type[], ParameterModifier[])

Pesquisa o método público especificado cujos parâmetros correspondem aos modificadores e tipos de argumento especificados.Searches for the specified public method whose parameters match the specified argument types and modifiers.

(Herdado de Type)
GetMethodImpl(String, BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])

Quando substituído em uma classe derivada, pesquisa o método especificado, cujos parâmetros correspondem aos tipos de argumento e modificadores especificados, usando as restrições de associação especificadas e a convenção de chamada especificada.When overridden in a derived class, searches for the specified method whose parameters match the specified argument types and modifiers, using the specified binding constraints and the specified calling convention.

(Herdado de Type)
GetMethodImpl(String, Int32, BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[]) (Herdado de Type)
GetMethods()

Retorna todos os métodos públicos do Type atual.Returns all the public methods of the current Type.

(Herdado de Type)
GetMethods(BindingFlags)

Sem suporte para parâmetros de tipo genérico incompletos.Not supported for incomplete generic type parameters.

GetNestedType(String)

Pesquisa o tipo aninhado público com o nome especificado.Searches for the public nested type with the specified name.

(Herdado de Type)
GetNestedType(String, BindingFlags)

Sem suporte para parâmetros de tipo genérico incompletos.Not supported for incomplete generic type parameters.

GetNestedTypes()

Retorna os tipos públicos aninhados no Type atual.Returns the public types nested in the current Type.

(Herdado de Type)
GetNestedTypes(BindingFlags)

Sem suporte para parâmetros de tipo genérico incompletos.Not supported for incomplete generic type parameters.

GetProperties()

Retorna todas as propriedades públicas do Type atual.Returns all the public properties of the current Type.

(Herdado de Type)
GetProperties(BindingFlags)

Sem suporte para parâmetros de tipo genérico incompletos.Not supported for incomplete generic type parameters.

GetProperty(String)

Pesquisa a propriedade pública com o nome especificado.Searches for the public property with the specified name.

(Herdado de Type)
GetProperty(String, BindingFlags)

Pesquisa a propriedade especificada usando as restrições de associação especificadas.Searches for the specified property, using the specified binding constraints.

(Herdado de Type)
GetProperty(String, BindingFlags, Binder, Type, Type[], ParameterModifier[])

Pesquisa a propriedade especificada cujos parâmetros correspondem aos modificadores e tipos de argumento especificados, usando as restrições de associação especificadas.Searches for the specified property whose parameters match the specified argument types and modifiers, using the specified binding constraints.

(Herdado de Type)
GetProperty(String, Type)

Pesquisa a propriedade pública com o nome e tipo retornado especificados.Searches for the public property with the specified name and return type.

(Herdado de Type)
GetProperty(String, Type, Type[])

Pesquisa a propriedade pública especificada cujos parâmetros correspondem aos tipos de argumento especificados.Searches for the specified public property whose parameters match the specified argument types.

(Herdado de Type)
GetProperty(String, Type, Type[], ParameterModifier[])

Pesquisa a propriedade pública especificada cujos parâmetros correspondem aos tipos de argumento e modificadores especificados.Searches for the specified public property whose parameters match the specified argument types and modifiers.

(Herdado de Type)
GetProperty(String, Type[])

Pesquisa a propriedade pública especificada cujos parâmetros correspondem aos tipos de argumento especificados.Searches for the specified public property whose parameters match the specified argument types.

(Herdado de Type)
GetPropertyImpl(String, BindingFlags, Binder, Type, Type[], ParameterModifier[])

Quando substituído em uma classe derivada, pesquisa a propriedade especificada cujos parâmetros correspondem aos modificadores e tipos de argumento especificados, usando as restrições de associação especificadas.When overridden in a derived class, searches for the specified property whose parameters match the specified argument types and modifiers, using the specified binding constraints.

(Herdado de Type)
GetType()

Obtém o Type atual.Gets the current Type.

(Herdado de Type)
GetTypeCodeImpl()

Retorna o código de tipo subjacente desta instância Type.Returns the underlying type code of this Type instance.

(Herdado de Type)
HasElementTypeImpl()

Quando substituído em uma classe derivada, implementa a propriedade HasElementType e determina se o Type atual abrange ou se refere a outro tipo, ou seja, se o Type atual é uma matriz, um ponteiro ou é passado por referência.When overridden in a derived class, implements the HasElementType property and determines whether the current Type encompasses or refers to another type; that is, whether the current Type is an array, a pointer, or is passed by reference.

(Herdado de Type)
HasSameMetadataDefinitionAs(MemberInfo) (Herdado de MemberInfo)
InvokeMember(String, BindingFlags, Binder, Object, Object[])

Invoca o membro especificado, usando as restrições de associação especificadas e fazendo a correspondência da lista de argumentos especificada.Invokes the specified member, using the specified binding constraints and matching the specified argument list.

(Herdado de Type)
InvokeMember(String, BindingFlags, Binder, Object, Object[], CultureInfo)

Invoca o membro especificado, usando as restrições de associação especificadas e fazendo a correspondência da lista de argumentos e cultura especificadas.Invokes the specified member, using the specified binding constraints and matching the specified argument list and culture.

(Herdado de Type)
InvokeMember(String, BindingFlags, Binder, Object, Object[], ParameterModifier[], CultureInfo, String[])

Sem suporte para parâmetros de tipo genérico incompletos.Not supported for incomplete generic type parameters.

IsArrayImpl()

Quando substituído em uma classe derivada, implementa a propriedade IsArray e determina se o Type é uma matriz.When overridden in a derived class, implements the IsArray property and determines whether the Type is an array.

(Herdado de Type)
IsAssignableFrom(Type)

Gera uma exceção NotSupportedException em todos os casos.Throws a NotSupportedException exception in all cases.

IsAssignableFrom(TypeInfo)

Gera uma exceção NotSupportedException em todos os casos.Throws a NotSupportedException exception in all cases.

IsByRefImpl()

Quando substituído em uma classe derivada, implementa a propriedade IsByRef e determina se o Type é passado por referência.When overridden in a derived class, implements the IsByRef property and determines whether the Type is passed by reference.

(Herdado de Type)
IsCOMObjectImpl()

Quando substituído em uma classe derivada, implementa a propriedade IsCOMObject e determina se o Type é um objeto COM.When overridden in a derived class, implements the IsCOMObject property and determines whether the Type is a COM object.

(Herdado de Type)
IsContextfulImpl()

Implementa a propriedade IsContextful e determina se o Type pode ser hospedado em um contexto.Implements the IsContextful property and determines whether the Type can be hosted in a context.

(Herdado de Type)
IsDefined(Type, Boolean)

Sem suporte para parâmetros de tipo genérico incompletos.Not supported for incomplete generic type parameters.

IsEnumDefined(Object)

Retorna um valor que indica se o valor especificado existe no tipo de enumeração atual.Returns a value that indicates whether the specified value exists in the current enumeration type.

(Herdado de Type)
IsEquivalentTo(Type)

Determina se dois tipos COM têm a mesma identidade e são elegíveis para equivalência de tipo.Determines whether two COM types have the same identity and are eligible for type equivalence.

(Herdado de Type)
IsInstanceOfType(Object)
IsMarshalByRefImpl()

Implementa a propriedade IsMarshalByRef e determina se é realizado marshal no Type por referência.Implements the IsMarshalByRef property and determines whether the Type is marshaled by reference.

(Herdado de Type)
IsPointerImpl()

Quando substituído em uma classe derivada, implementa a propriedade IsPointer e determina se o Type é um ponteiro.When overridden in a derived class, implements the IsPointer property and determines whether the Type is a pointer.

(Herdado de Type)
IsPrimitiveImpl()

Quando substituído em uma classe derivada, implementa a propriedade IsPrimitive e determina se o Type é um dos tipos primitivos.When overridden in a derived class, implements the IsPrimitive property and determines whether the Type is one of the primitive types.

(Herdado de Type)
IsSubclassOf(Type)

Sem suporte para parâmetros de tipo genérico incompletos.Not supported for incomplete generic type parameters.

IsValueTypeImpl()

Implementa a propriedade IsValueType e determina se o Type é um tipo de valor, ou seja, não é uma classe nem uma interface.Implements the IsValueType property and determines whether the Type is a value type; that is, not a class or an interface.

(Herdado de Type)
MakeArrayType()

Retorna o tipo de uma matriz unidimensional cujo tipo de elemento é o parâmetro de tipo genérico.Returns the type of a one-dimensional array whose element type is the generic type parameter.

MakeArrayType(Int32)

Retorna o tipo de uma matriz cujo tipo de elemento é o parâmetro de tipo genérico, com o número de dimensões especificado.Returns the type of an array whose element type is the generic type parameter, with the specified number of dimensions.

MakeByRefType()

Retorna um objeto Type que representa o parâmetro de tipo genérico atual quando passado como um parâmetro de referência.Returns a Type object that represents the current generic type parameter when passed as a reference parameter.

MakeGenericType(Type[])

Não é válido para parâmetros de tipo genérico incompletos.Not valid for incomplete generic type parameters.

MakePointerType()

Retorna um objeto Type que representa um ponteiro para o parâmetro de tipo genérico atual.Returns a Type object that represents a pointer to the current generic type parameter.

MemberwiseClone()

Cria uma cópia superficial do Object atual.Creates a shallow copy of the current Object.

(Herdado de Object)
SetBaseTypeConstraint(Type)

Define o tipo base que um tipo deve herdar para ser substituído pelo parâmetro de tipo.Sets the base type that a type must inherit in order to be substituted for the type parameter.

SetCustomAttribute(ConstructorInfo, Byte[])

Define um atributo personalizado usando um blob de atributo personalizado especificado.Sets a custom attribute using a specified custom attribute blob.

SetCustomAttribute(CustomAttributeBuilder)

Defina um atributo personalizado usando um construtor de atributos personalizados.Set a custom attribute using a custom attribute builder.

SetGenericParameterAttributes(GenericParameterAttributes)

Define as características de variação e restrições especiais do parâmetro genérico, tais como a restrição de construtor sem parâmetros.Sets the variance characteristics and special constraints of the generic parameter, such as the parameterless constructor constraint.

SetInterfaceConstraints(Type[])

Define as interfaces que um tipo deve implementar para ser substituído pelo parâmetro de tipo.Sets the interfaces a type must implement in order to be substituted for the type parameter.

ToString()

Retorna uma representação de cadeia de caracteres do parâmetro de tipo genérico atual.Returns a string representation of the current generic type parameter.

Implantações explícitas de interface

_MemberInfo.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

Mapeia um conjunto de nomes para um conjunto correspondente de identificadores de expedição.Maps a set of names to a corresponding set of dispatch identifiers.

(Herdado de MemberInfo)
_MemberInfo.GetType()

Obtém um objeto Type que representa a classe MemberInfo.Gets a Type object representing the MemberInfo class.

(Herdado de MemberInfo)
_MemberInfo.GetTypeInfo(UInt32, UInt32, IntPtr)

Recupera as informações do tipo de um objeto, que podem ser usadas para obter informações de tipo para uma interface.Retrieves the type information for an object, which can then be used to get the type information for an interface.

(Herdado de MemberInfo)
_MemberInfo.GetTypeInfoCount(UInt32)

Retorna o número de interfaces de informações do tipo que um objeto fornece (0 ou 1).Retrieves the number of type information interfaces that an object provides (either 0 or 1).

(Herdado de MemberInfo)
_MemberInfo.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Fornece acesso a propriedades e métodos expostos por um objeto.Provides access to properties and methods exposed by an object.

(Herdado de MemberInfo)
_Type.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

Mapeia um conjunto de nomes para um conjunto correspondente de identificadores de expedição.Maps a set of names to a corresponding set of dispatch identifiers.

(Herdado de Type)
_Type.GetTypeInfo(UInt32, UInt32, IntPtr)

Recupera as informações do tipo de um objeto, que podem ser usadas para obter informações de tipo para uma interface.Retrieves the type information for an object, which can then be used to get the type information for an interface.

(Herdado de Type)
_Type.GetTypeInfoCount(UInt32)

Retorna o número de interfaces de informações do tipo que um objeto fornece (0 ou 1).Retrieves the number of type information interfaces that an object provides (either 0 or 1).

(Herdado de Type)
_Type.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Fornece acesso a propriedades e métodos expostos por um objeto.Provides access to properties and methods exposed by an object.

(Herdado de Type)
ICustomAttributeProvider.GetCustomAttributes(Boolean) (Herdado de MemberInfo)
ICustomAttributeProvider.GetCustomAttributes(Type, Boolean) (Herdado de MemberInfo)
ICustomAttributeProvider.IsDefined(Type, Boolean) (Herdado de MemberInfo)

Métodos de Extensão

GetCustomAttribute(MemberInfo, Type)

Recupera um atributo personalizado de um tipo especificado aplicado a um membro especificado.Retrieves a custom attribute of a specified type that is applied to a specified member.

GetCustomAttribute(MemberInfo, Type, Boolean)

Recupera um atributo personalizado de um tipo especificado aplicado a um membro especificado e opcionalmente inspeciona os ancestrais desse membro.Retrieves a custom attribute of a specified type that is applied to a specified member, and optionally inspects the ancestors of that member.

GetCustomAttribute<T>(MemberInfo)

Recupera um atributo personalizado de um tipo especificado aplicado a um membro especificado.Retrieves a custom attribute of a specified type that is applied to a specified member.

GetCustomAttribute<T>(MemberInfo, Boolean)

Recupera um atributo personalizado de um tipo especificado aplicado a um membro especificado e opcionalmente inspeciona os ancestrais desse membro.Retrieves a custom attribute of a specified type that is applied to a specified member, and optionally inspects the ancestors of that member.

GetCustomAttributes(MemberInfo)

Recupera uma coleção de atributos personalizados que são aplicados a um membro especificado.Retrieves a collection of custom attributes that are applied to a specified member.

GetCustomAttributes(MemberInfo, Boolean)

Recupera uma coleção de atributos personalizados aplicado a um membro especificado e opcionalmente inspeciona os ancestrais desse membro.Retrieves a collection of custom attributes that are applied to a specified member, and optionally inspects the ancestors of that member.

GetCustomAttributes(MemberInfo, Type)

Recupera uma coleção de atributos personalizados de um tipo especificado que são aplicados a um membro especificado.Retrieves a collection of custom attributes of a specified type that are applied to a specified member.

GetCustomAttributes(MemberInfo, Type, Boolean)

Recupera uma coleção de atributos personalizados de um tipo especificado aplicado a um membro especificado e opcionalmente inspeciona os ancestrais desse membro.Retrieves a collection of custom attributes of a specified type that are applied to a specified member, and optionally inspects the ancestors of that member.

GetCustomAttributes<T>(MemberInfo)

Recupera uma coleção de atributos personalizados de um tipo especificado que são aplicados a um membro especificado.Retrieves a collection of custom attributes of a specified type that are applied to a specified member.

GetCustomAttributes<T>(MemberInfo, Boolean)

Recupera uma coleção de atributos personalizados de um tipo especificado aplicado a um membro especificado e opcionalmente inspeciona os ancestrais desse membro.Retrieves a collection of custom attributes of a specified type that are applied to a specified member, and optionally inspects the ancestors of that member.

IsDefined(MemberInfo, Type)

Indica se os atributos personalizados de um tipo especificados são aplicados a um membro especificado.Indicates whether custom attributes of a specified type are applied to a specified member.

IsDefined(MemberInfo, Type, Boolean)

Indica se os atributos personalizados de um tipo especificado são aplicados a um membro especificado e, opcionalmente, aplicados a seus ancestrais.Indicates whether custom attributes of a specified type are applied to a specified member, and, optionally, applied to its ancestors.

GetTypeInfo(Type)

Retorna a representação de TypeInfo do tipo especificado.Returns the TypeInfo representation of the specified type.

GetMetadataToken(MemberInfo)

Obtém um token de metadados para o membro fornecido, se disponível.Gets a metadata token for the given member, if available.

HasMetadataToken(MemberInfo)

Retorna um valor que indica se um token de metadados está disponível para o membro especificado.Returns a value that indicates whether a metadata token is available for the specified member.

GetRuntimeEvent(Type, String)

Recupera um objeto que representa o evento especificado.Retrieves an object that represents the specified event.

GetRuntimeEvents(Type)

Recupera uma coleção que representa todos os eventos definidos em um tipo especificado.Retrieves a collection that represents all the events defined on a specified type.

GetRuntimeField(Type, String)

Recupera um objeto que representa um campo especificado.Retrieves an object that represents a specified field.

GetRuntimeFields(Type)

Recupera uma coleção que representa todos os campos definidos em um tipo especificado.Retrieves a collection that represents all the fields defined on a specified type.

GetRuntimeMethod(Type, String, Type[])

Recupera um objeto que representa um método especificado.Retrieves an object that represents a specified method.

GetRuntimeMethods(Type)

Recupera uma coleção que representa todos os métodos definidos em um tipo especificado.Retrieves a collection that represents all methods defined on a specified type.

GetRuntimeProperties(Type)

Recupera uma coleção que representa todas as propriedades definidas em um tipo especificado.Retrieves a collection that represents all the properties defined on a specified type.

GetRuntimeProperty(Type, String)

Recupera um objeto que representa uma propriedade especificada.Retrieves an object that represents a specified property.

GetConstructor(Type, Type[])
GetConstructors(Type)
GetConstructors(Type, BindingFlags)
GetDefaultMembers(Type)
GetEvent(Type, String)
GetEvent(Type, String, BindingFlags)
GetEvents(Type)
GetEvents(Type, BindingFlags)
GetField(Type, String)
GetField(Type, String, BindingFlags)
GetFields(Type)
GetFields(Type, BindingFlags)
GetGenericArguments(Type)
GetInterfaces(Type)
GetMember(Type, String)
GetMember(Type, String, BindingFlags)
GetMembers(Type)
GetMembers(Type, BindingFlags)
GetMethod(Type, String)
GetMethod(Type, String, BindingFlags)
GetMethod(Type, String, Type[])
GetMethods(Type)
GetMethods(Type, BindingFlags)
GetNestedType(Type, String, BindingFlags)
GetNestedTypes(Type, BindingFlags)
GetProperties(Type)
GetProperties(Type, BindingFlags)
GetProperty(Type, String)
GetProperty(Type, String, BindingFlags)
GetProperty(Type, String, Type)
GetProperty(Type, String, Type, Type[])
IsAssignableFrom(Type, Type)
IsInstanceOfType(Type, Object)

Aplica-se a

Veja também