TypeBuilder.DefineProperty Método

Definição

Adiciona uma nova propriedade ao tipo.

Sobrecargas

DefineProperty(String, PropertyAttributes, Type, Type[])

Adiciona uma nova propriedade ao tipo, com o nome e assinatura de propriedade fornecidos.

DefineProperty(String, PropertyAttributes, CallingConventions, Type, Type[])

Adiciona uma nova propriedade ao tipo, com o nome, os atributos, a convenção de chamada e assinatura de propriedade fornecidos.

DefineProperty(String, PropertyAttributes, Type, Type[], Type[], Type[], Type[][], Type[][])

Adiciona uma nova propriedade ao tipo, com o nome, a assinatura de propriedade e os modificadores personalizado fornecidos.

DefineProperty(String, PropertyAttributes, CallingConventions, Type, Type[], Type[], Type[], Type[][], Type[][])

Adiciona uma nova propriedade ao tipo, com o nome, a convenção de chamada, a assinatura de propriedade e os modificadores personalizados fornecidos.

DefineProperty(String, PropertyAttributes, Type, Type[])

Origem:
TypeBuilder.cs
Origem:
TypeBuilder.cs
Origem:
TypeBuilder.cs

Adiciona uma nova propriedade ao tipo, com o nome e assinatura de propriedade fornecidos.

public System.Reflection.Emit.PropertyBuilder DefineProperty (string name, System.Reflection.PropertyAttributes attributes, Type returnType, Type[]? parameterTypes);
public System.Reflection.Emit.PropertyBuilder DefineProperty (string name, System.Reflection.PropertyAttributes attributes, Type returnType, Type[] parameterTypes);

Parâmetros

name
String

O nome da propriedade. name não pode conter nulos inseridos.

attributes
PropertyAttributes

Os atributos da propriedade.

returnType
Type

O tipo de retorno da propriedade.

parameterTypes
Type[]

Os tipos dos parâmetros da propriedade.

Retornos

A propriedade definida.

Exceções

O comprimento de name é zero.

name é null.

- ou -

Qualquer um dos elementos da matriz de parameterTypes é null.

O tipo foi criado anteriormente usando CreateType().

Exemplos

O exemplo de código a seguir demonstra como definir uma propriedade dinâmica e obter uma PropertyBuilder para especificação. Observe que um PropertyBuilder também deve ter um correspondente MethodBuilder, que abrigará a lógica IL da propriedade .

using System;
using System.Threading;
using System.Reflection;
using System.Reflection.Emit;

class PropertyBuilderDemo
{
   public static Type BuildDynamicTypeWithProperties()
   {
        AppDomain myDomain = Thread.GetDomain();
        AssemblyName myAsmName = new AssemblyName();
        myAsmName.Name = "MyDynamicAssembly";

        // To generate a persistable assembly, specify AssemblyBuilderAccess.RunAndSave.
        AssemblyBuilder myAsmBuilder = myDomain.DefineDynamicAssembly(myAsmName,
                                                        AssemblyBuilderAccess.RunAndSave);
        // Generate a persistable single-module assembly.
        ModuleBuilder myModBuilder =
            myAsmBuilder.DefineDynamicModule(myAsmName.Name, myAsmName.Name + ".dll");

        TypeBuilder myTypeBuilder = myModBuilder.DefineType("CustomerData",
                                                        TypeAttributes.Public);

        FieldBuilder customerNameBldr = myTypeBuilder.DefineField("customerName",
                                                        typeof(string),
                                                        FieldAttributes.Private);

        // The last argument of DefineProperty is null, because the
        // property has no parameters. (If you don't specify null, you must
        // specify an array of Type objects. For a parameterless property,
        // use an array with no elements: new Type[] {})
        PropertyBuilder custNamePropBldr = myTypeBuilder.DefineProperty("CustomerName",
                                                         PropertyAttributes.HasDefault,
                                                         typeof(string),
                                                         null);

        // The property set and property get methods require a special
        // set of attributes.
        MethodAttributes getSetAttr =
            MethodAttributes.Public | MethodAttributes.SpecialName |
                MethodAttributes.HideBySig;

        // Define the "get" accessor method for CustomerName.
        MethodBuilder custNameGetPropMthdBldr =
            myTypeBuilder.DefineMethod("get_CustomerName",
                                       getSetAttr,
                                       typeof(string),
                                       Type.EmptyTypes);

        ILGenerator custNameGetIL = custNameGetPropMthdBldr.GetILGenerator();

        custNameGetIL.Emit(OpCodes.Ldarg_0);
        custNameGetIL.Emit(OpCodes.Ldfld, customerNameBldr);
        custNameGetIL.Emit(OpCodes.Ret);

        // Define the "set" accessor method for CustomerName.
        MethodBuilder custNameSetPropMthdBldr =
            myTypeBuilder.DefineMethod("set_CustomerName",
                                       getSetAttr,
                                       null,
                                       new Type[] { typeof(string) });

        ILGenerator custNameSetIL = custNameSetPropMthdBldr.GetILGenerator();

        custNameSetIL.Emit(OpCodes.Ldarg_0);
        custNameSetIL.Emit(OpCodes.Ldarg_1);
        custNameSetIL.Emit(OpCodes.Stfld, customerNameBldr);
        custNameSetIL.Emit(OpCodes.Ret);

        // Last, we must map the two methods created above to our PropertyBuilder to
        // their corresponding behaviors, "get" and "set" respectively.
        custNamePropBldr.SetGetMethod(custNameGetPropMthdBldr);
        custNamePropBldr.SetSetMethod(custNameSetPropMthdBldr);

        Type retval = myTypeBuilder.CreateType();

        // Save the assembly so it can be examined with Ildasm.exe,
        // or referenced by a test program.
        myAsmBuilder.Save(myAsmName.Name + ".dll");
        return retval;
   }

   public static void Main()
   {
        Type custDataType = BuildDynamicTypeWithProperties();

        PropertyInfo[] custDataPropInfo = custDataType.GetProperties();
        foreach (PropertyInfo pInfo in custDataPropInfo) {
           Console.WriteLine("Property '{0}' created!", pInfo.ToString());
        }

        Console.WriteLine("---");
        // Note that when invoking a property, you need to use the proper BindingFlags -
        // BindingFlags.SetProperty when you invoke the "set" behavior, and
        // BindingFlags.GetProperty when you invoke the "get" behavior. Also note that
        // we invoke them based on the name we gave the property, as expected, and not
        // the name of the methods we bound to the specific property behaviors.

        object custData = Activator.CreateInstance(custDataType);
        custDataType.InvokeMember("CustomerName", BindingFlags.SetProperty,
                                      null, custData, new object[]{ "Joe User" });

        Console.WriteLine("The customerName field of instance custData has been set to '{0}'.",
                           custDataType.InvokeMember("CustomerName", BindingFlags.GetProperty,
                                                      null, custData, new object[]{ }));
   }
}

// --- O U T P U T ---
// The output should be as follows:
// -------------------
// Property 'System.String CustomerName' created!
// ---
// The customerName field of instance custData has been set to 'Joe User'.
// -------------------

Aplica-se a

.NET 9 e outras versões
Produto Versões
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

DefineProperty(String, PropertyAttributes, CallingConventions, Type, Type[])

Origem:
TypeBuilder.cs
Origem:
TypeBuilder.cs
Origem:
TypeBuilder.cs

Adiciona uma nova propriedade ao tipo, com o nome, os atributos, a convenção de chamada e assinatura de propriedade fornecidos.

public System.Reflection.Emit.PropertyBuilder DefineProperty (string name, System.Reflection.PropertyAttributes attributes, System.Reflection.CallingConventions callingConvention, Type returnType, Type[]? parameterTypes);
public System.Reflection.Emit.PropertyBuilder DefineProperty (string name, System.Reflection.PropertyAttributes attributes, System.Reflection.CallingConventions callingConvention, Type returnType, Type[] parameterTypes);

Parâmetros

name
String

O nome da propriedade. name não pode conter nulos inseridos.

attributes
PropertyAttributes

Os atributos da propriedade.

callingConvention
CallingConventions

A convenção de chamada dos acessadores de propriedade.

returnType
Type

O tipo de retorno da propriedade.

parameterTypes
Type[]

Os tipos dos parâmetros da propriedade.

Retornos

A propriedade definida.

Exceções

O comprimento de name é zero.

name é null.

- ou -

Qualquer um dos elementos da matriz de parameterTypes é null.

O tipo foi criado anteriormente usando CreateType().

Aplica-se a

.NET 9 e outras versões
Produto Versões
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

DefineProperty(String, PropertyAttributes, Type, Type[], Type[], Type[], Type[][], Type[][])

Origem:
TypeBuilder.cs
Origem:
TypeBuilder.cs
Origem:
TypeBuilder.cs

Adiciona uma nova propriedade ao tipo, com o nome, a assinatura de propriedade e os modificadores personalizado fornecidos.

public System.Reflection.Emit.PropertyBuilder DefineProperty (string name, System.Reflection.PropertyAttributes attributes, Type returnType, Type[]? returnTypeRequiredCustomModifiers, Type[]? returnTypeOptionalCustomModifiers, Type[]? parameterTypes, Type[][]? parameterTypeRequiredCustomModifiers, Type[][]? parameterTypeOptionalCustomModifiers);
public System.Reflection.Emit.PropertyBuilder DefineProperty (string name, System.Reflection.PropertyAttributes attributes, Type returnType, Type[] returnTypeRequiredCustomModifiers, Type[] returnTypeOptionalCustomModifiers, Type[] parameterTypes, Type[][] parameterTypeRequiredCustomModifiers, Type[][] parameterTypeOptionalCustomModifiers);

Parâmetros

name
String

O nome da propriedade. name não pode conter nulos inseridos.

attributes
PropertyAttributes

Os atributos da propriedade.

returnType
Type

O tipo de retorno da propriedade.

returnTypeRequiredCustomModifiers
Type[]

Uma matriz de tipos que representa os modificadores personalizados obrigatórios, como IsConst, para o tipo de retorno da propriedade. Se o tipo de retorno não tiver modificadores personalizados obrigatórios, especifique null.

returnTypeOptionalCustomModifiers
Type[]

Uma matriz de tipos que representa os modificadores personalizados opcionais, como IsConst, para o tipo de retorno da propriedade. Se o tipo de retorno não tiver modificadores personalizados opcionais, especifique null.

parameterTypes
Type[]

Os tipos dos parâmetros da propriedade.

parameterTypeRequiredCustomModifiers
Type[][]

Uma matriz de matrizes de tipos. Cada matriz de tipos representa os modificadores personalizados obrigatórios para o parâmetro correspondente, por exemplo IsConst. Se um determinado parâmetro tiver não modificadores personalizados obrigatórios, especifique null em vez de uma matriz de tipos. Se nenhum dos parâmetros tiver modificadores personalizados obrigatórios, especifique null em vez de uma matriz de matrizes.

parameterTypeOptionalCustomModifiers
Type[][]

Uma matriz de matrizes de tipos. Cada matriz de tipos representa os modificadores personalizados opcionais para o parâmetro correspondente, por exemplo IsConst. Se um determinado parâmetro tiver não modificadores personalizados opcionais, especifique null em vez de uma matriz de tipos. Se nenhum dos parâmetros tiver modificadores personalizados opcionais, especifique null em vez de uma matriz de matrizes.

Retornos

A propriedade definida.

Exceções

O comprimento de name é zero.

name é null

- ou -

Qualquer um dos elementos da matriz de parameterTypes é null

O tipo foi criado anteriormente usando CreateType().

Comentários

Essa sobrecarga é fornecida para designers de compiladores gerenciados.

Observação

Para obter mais informações sobre modificadores personalizados, consulte ECMA C# e Common Language Infrastructure Standards e Standard ECMA-335 – CLI (Common Language Infrastructure).

Aplica-se a

.NET 9 e outras versões
Produto Versões
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

DefineProperty(String, PropertyAttributes, CallingConventions, Type, Type[], Type[], Type[], Type[][], Type[][])

Origem:
TypeBuilder.cs
Origem:
TypeBuilder.cs
Origem:
TypeBuilder.cs

Adiciona uma nova propriedade ao tipo, com o nome, a convenção de chamada, a assinatura de propriedade e os modificadores personalizados fornecidos.

public System.Reflection.Emit.PropertyBuilder DefineProperty (string name, System.Reflection.PropertyAttributes attributes, System.Reflection.CallingConventions callingConvention, Type returnType, Type[]? returnTypeRequiredCustomModifiers, Type[]? returnTypeOptionalCustomModifiers, Type[]? parameterTypes, Type[][]? parameterTypeRequiredCustomModifiers, Type[][]? parameterTypeOptionalCustomModifiers);
public System.Reflection.Emit.PropertyBuilder DefineProperty (string name, System.Reflection.PropertyAttributes attributes, System.Reflection.CallingConventions callingConvention, Type returnType, Type[] returnTypeRequiredCustomModifiers, Type[] returnTypeOptionalCustomModifiers, Type[] parameterTypes, Type[][] parameterTypeRequiredCustomModifiers, Type[][] parameterTypeOptionalCustomModifiers);

Parâmetros

name
String

O nome da propriedade. name não pode conter nulos inseridos.

attributes
PropertyAttributes

Os atributos da propriedade.

callingConvention
CallingConventions

A convenção de chamada dos acessadores de propriedade.

returnType
Type

O tipo de retorno da propriedade.

returnTypeRequiredCustomModifiers
Type[]

Uma matriz de tipos que representa os modificadores personalizados obrigatórios, como IsConst, para o tipo de retorno da propriedade. Se o tipo de retorno não tiver modificadores personalizados obrigatórios, especifique null.

returnTypeOptionalCustomModifiers
Type[]

Uma matriz de tipos que representa os modificadores personalizados opcionais, como IsConst, para o tipo de retorno da propriedade. Se o tipo de retorno não tiver modificadores personalizados opcionais, especifique null.

parameterTypes
Type[]

Os tipos dos parâmetros da propriedade.

parameterTypeRequiredCustomModifiers
Type[][]

Uma matriz de matrizes de tipos. Cada matriz de tipos representa os modificadores personalizados obrigatórios para o parâmetro correspondente, por exemplo IsConst. Se um determinado parâmetro tiver não modificadores personalizados obrigatórios, especifique null em vez de uma matriz de tipos. Se nenhum dos parâmetros tiver modificadores personalizados obrigatórios, especifique null em vez de uma matriz de matrizes.

parameterTypeOptionalCustomModifiers
Type[][]

Uma matriz de matrizes de tipos. Cada matriz de tipos representa os modificadores personalizados opcionais para o parâmetro correspondente, por exemplo IsConst. Se um determinado parâmetro tiver não modificadores personalizados opcionais, especifique null em vez de uma matriz de tipos. Se nenhum dos parâmetros tiver modificadores personalizados opcionais, especifique null em vez de uma matriz de matrizes.

Retornos

A propriedade definida.

Exceções

O comprimento de name é zero.

name é null.

- ou -

Qualquer um dos elementos da matriz de parameterTypes é null.

O tipo foi criado anteriormente usando CreateType().

Comentários

Essa sobrecarga é fornecida para designers de compiladores gerenciados.

Observação

Para obter mais informações sobre modificadores personalizados, consulte ECMA C# e Common Language Infrastructure Standards e Standard ECMA-335 – CLI (Common Language Infrastructure).

Essa sobrecarga de método é introduzida no .NET Framework 3.5 ou posterior.

Aplica-se a

.NET 9 e outras versões
Produto Versões
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1