PropertyBuilder Osztály

Definíció

Meghatározza egy típus tulajdonságait.

public ref class PropertyBuilder sealed : System::Reflection::PropertyInfo, System::Runtime::InteropServices::_PropertyBuilder
public ref class PropertyBuilder sealed : System::Reflection::PropertyInfo
[System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)]
public sealed class PropertyBuilder : System.Reflection.PropertyInfo, System.Runtime.InteropServices._PropertyBuilder
[System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)]
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class PropertyBuilder : System.Reflection.PropertyInfo, System.Runtime.InteropServices._PropertyBuilder
public sealed class PropertyBuilder : System.Reflection.PropertyInfo
[<System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)>]
type PropertyBuilder = class
    inherit PropertyInfo
    interface _PropertyBuilder
[<System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type PropertyBuilder = class
    inherit PropertyInfo
    interface _PropertyBuilder
type PropertyBuilder = class
    inherit PropertyInfo
Public NotInheritable Class PropertyBuilder
Inherits PropertyInfo
Implements _PropertyBuilder
Public NotInheritable Class PropertyBuilder
Inherits PropertyInfo
Öröklődés
PropertyBuilder
Attribútumok
Megvalósítás

Példák

Az alábbi kódminta bemutatja, hogyan implementálhat tulajdonságokat dinamikus típusban a PropertyBuilder tulajdonság-keretrendszer létrehozásához kapott TypeBuilder.DefineProperty és a tulajdonságon belüli IL-logika implementálásához kapcsolódó MethodBuilder lekérdezéssel.

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'.
// -------------------
Imports System.Threading
Imports System.Reflection
Imports System.Reflection.Emit

Class PropertyBuilderDemo
   
   Public Shared Function BuildDynamicTypeWithProperties() As Type
      Dim myDomain As AppDomain = Thread.GetDomain()
      Dim myAsmName As New AssemblyName()
      myAsmName.Name = "MyDynamicAssembly"
      
      ' To generate a persistable assembly, specify AssemblyBuilderAccess.RunAndSave.
      Dim myAsmBuilder As AssemblyBuilder = myDomain.DefineDynamicAssembly(myAsmName, _
                                                        AssemblyBuilderAccess.RunAndSave)
      
      ' Generate a persistable, single-module assembly.
      Dim myModBuilder As ModuleBuilder = _
          myAsmBuilder.DefineDynamicModule(myAsmName.Name, myAsmName.Name & ".dll")
      
      Dim myTypeBuilder As TypeBuilder = myModBuilder.DefineType("CustomerData", TypeAttributes.Public)
      
      ' Define a private field to hold the property value.
      Dim customerNameBldr As FieldBuilder = myTypeBuilder.DefineField("customerName", _
                                             GetType(String), FieldAttributes.Private)
      
      ' The last argument of DefineProperty is Nothing, because the
      ' property has no parameters. (If you don't specify Nothing, you must
      ' specify an array of Type objects. For a parameterless property,
      ' use an array with no elements: New Type() {})
      Dim custNamePropBldr As PropertyBuilder = _
          myTypeBuilder.DefineProperty("CustomerName", _
                                       PropertyAttributes.HasDefault, _
                                       GetType(String), _
                                       Nothing)
      
      ' The property set and property get methods require a special
      ' set of attributes.
      Dim getSetAttr As MethodAttributes = _
          MethodAttributes.Public Or MethodAttributes.SpecialName _
              Or MethodAttributes.HideBySig

      ' Define the "get" accessor method for CustomerName.
      Dim custNameGetPropMthdBldr As MethodBuilder = _
          myTypeBuilder.DefineMethod("GetCustomerName", _
                                     getSetAttr, _
                                     GetType(String), _
                                     Type.EmptyTypes)
      
      Dim custNameGetIL As ILGenerator = custNameGetPropMthdBldr.GetILGenerator()
      
      custNameGetIL.Emit(OpCodes.Ldarg_0)
      custNameGetIL.Emit(OpCodes.Ldfld, customerNameBldr)
      custNameGetIL.Emit(OpCodes.Ret)
      
      ' Define the "set" accessor method for CustomerName.
      Dim custNameSetPropMthdBldr As MethodBuilder = _
          myTypeBuilder.DefineMethod("get_CustomerName", _
                                     getSetAttr, _
                                     Nothing, _
                                     New Type() {GetType(String)})
      
      Dim custNameSetIL As ILGenerator = 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)
            
      Dim retval As Type = 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
   End Function 'BuildDynamicTypeWithProperties
    
   
   Public Shared Sub Main()
      Dim custDataType As Type = BuildDynamicTypeWithProperties()
      
      Dim custDataPropInfo As PropertyInfo() = custDataType.GetProperties()
      Dim pInfo As PropertyInfo
      For Each pInfo In  custDataPropInfo
         Console.WriteLine("Property '{0}' created!", pInfo.ToString())
      Next pInfo
      
      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.
      Dim custData As Object = Activator.CreateInstance(custDataType)
      custDataType.InvokeMember("CustomerName", BindingFlags.SetProperty, Nothing, _
                                custData, New Object() {"Joe User"})
      
      Console.WriteLine("The customerName field of instance custData has been set to '{0}'.", _
                        custDataType.InvokeMember("CustomerName", BindingFlags.GetProperty, _
                        Nothing, custData, New Object() {}))
   End Sub
End Class


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

Megjegyzések

Az A PropertyBuilder mindig társítva van egy TypeBuilder. A TypeBuilder. DefineProperty metódus egy újat PropertyBuilder ad vissza egy ügyfélnek.

Tulajdonságok

Name Description
Attributes

Lekéri a tulajdonság attribútumait.

CanRead

Beolvas egy értéket, amely jelzi, hogy a tulajdonság olvasható-e.

CanWrite

Beolvas egy értéket, amely jelzi, hogy a tulajdonság megírható-e.

CustomAttributes

Lekéri a tag egyéni attribútumait tartalmazó gyűjteményt.

(Öröklődés forrása MemberInfo)
DeclaringType

Lekéri a tagot deklaráló osztályt.

GetMethod

Lekéri a get tulajdonság tartozékát.

(Öröklődés forrása PropertyInfo)
IsSpecialName

Beolvas egy értéket, amely jelzi, hogy a tulajdonság a különleges név-e.

(Öröklődés forrása PropertyInfo)
MemberType

MemberTypes Olyan értéket kap, amely azt jelzi, hogy ez a tag egy tulajdonság.

(Öröklődés forrása PropertyInfo)
MetadataToken

Egy metaadat-elemet azonosító értéket kap.

(Öröklődés forrása MemberInfo)
Module

Lekéri azt a modult, amelyben az aktuális tulajdonságot deklaráló típus van definiálva.

Name

Lekéri a tag nevét.

PropertyToken

Lekéri a tulajdonság jogkivonatát.

PropertyType

Lekéri a tulajdonság mezőjének típusát.

ReflectedType

Lekéri a példány beszerzéséhez használt osztályobjektumot MemberInfo.

SetMethod

Lekéri a set tulajdonság tartozékát.

(Öröklődés forrása PropertyInfo)

Metódusok

Name Description
AddOtherMethod(MethodBuilder)

Hozzáadja a tulajdonsághoz társított egyéb metódusok egyikét.

Equals(Object)

Olyan értéket ad vissza, amely jelzi, hogy ez a példány egyenlő-e egy adott objektummal.

(Öröklődés forrása PropertyInfo)
GetAccessors()

Olyan tömböt ad vissza, amelynek elemei az aktuális példány által tükrözött tulajdonság nyilvános get és set tartozékait tükrözik.

(Öröklődés forrása PropertyInfo)
GetAccessors(Boolean)

A tulajdonság nyilvános és nem nyilvános get és set tartozékainak tömbét adja vissza.

GetConstantValue()

Egy fordító által a tulajdonsághoz társított literális értéket ad vissza.

(Öröklődés forrása PropertyInfo)
GetCustomAttributes(Boolean)

A tulajdonság összes egyéni attribútumának tömbét adja vissza.

GetCustomAttributes(Type, Boolean)

A által azonosított Typeegyéni attribútumok tömbjének értékét adja vissza.

GetCustomAttributesData()

Visszaadja a CustomAttributeData céltagra alkalmazott attribútumok adatait képviselő objektumok listáját.

(Öröklődés forrása MemberInfo)
GetGetMethod()

A tulajdonság nyilvános get tartozékát adja vissza.

(Öröklődés forrása PropertyInfo)
GetGetMethod(Boolean)

A tulajdonság nyilvános és nem nyilvános lekéréses tartozékát adja vissza.

GetHashCode()

A példány kivonatkódját adja vissza.

(Öröklődés forrása PropertyInfo)
GetIndexParameters()

A tulajdonság összes indexparaméterének tömbét adja vissza.

GetOptionalCustomModifiers()

A tulajdonság választható egyéni módosítóinak megfelelő típustömböt ad vissza.

(Öröklődés forrása PropertyInfo)
GetRawConstantValue()

Egy fordító által a tulajdonsághoz társított literális értéket ad vissza.

(Öröklődés forrása PropertyInfo)
GetRequiredCustomModifiers()

A tulajdonság szükséges egyéni módosítóinak megfelelő típustömböt ad vissza.

(Öröklődés forrása PropertyInfo)
GetSetMethod()

A tulajdonság nyilvános set tartozékát adja vissza.

(Öröklődés forrása PropertyInfo)
GetSetMethod(Boolean)

A tulajdonsághoz beállított tartozékot adja vissza.

GetType()

Felderíti egy tulajdonság attribútumait, és hozzáférést biztosít a tulajdonság metaadataihoz.

(Öröklődés forrása PropertyInfo)
GetValue(Object, BindingFlags, Binder, Object[], CultureInfo)

Lekéri a megadott kötéssel, indexel és CultureInfo.

GetValue(Object, Object[])

Az indexelt tulajdonság értékét a tulajdonság lekérési metódusának meghívásával kapja meg.

GetValue(Object)

Egy adott objektum tulajdonságértékét adja vissza.

(Öröklődés forrása PropertyInfo)
HasSameMetadataDefinitionAs(MemberInfo)

Meghatározza egy típus tulajdonságait.

(Öröklődés forrása MemberInfo)
IsDefined(Type, Boolean)

Azt jelzi, hogy egy vagy több példány attributeType van-e definiálva ezen a tulajdonságon.

MemberwiseClone()

Az aktuális Objectpéldány sekély másolatát hozza létre.

(Öröklődés forrása Object)
SetConstant(Object)

A tulajdonság alapértelmezett értékét állítja be.

SetCustomAttribute(ConstructorInfo, Byte[])

Egyéni attribútum beállítása egy megadott egyéni attribútumblob használatával.

SetCustomAttribute(CustomAttributeBuilder)

Egyéni attribútum beállítása egyéni attribútumszerkesztővel.

SetGetMethod(MethodBuilder)

Beállítja a tulajdonságértéket lekérő metódust.

SetSetMethod(MethodBuilder)

Beállítja a tulajdonság értékét meghatározó metódust.

SetValue(Object, Object, BindingFlags, Binder, Object[], CultureInfo)

Az adott objektum tulajdonságértékét az adott értékre állítja.

SetValue(Object, Object, Object[])

A tulajdonság értékét az indextulajdonságok opcionális indexértékeivel állítja be.

SetValue(Object, Object)

Egy megadott objektum tulajdonságértékének beállítása.

(Öröklődés forrása PropertyInfo)
ToString()

Az aktuális objektumot jelképező sztringet ad vissza.

(Öröklődés forrása Object)

Explicit interfész-implementációk

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

Névkészletet képez le a küldési azonosítók megfelelő készletére.

(Öröklődés forrása MemberInfo)
_MemberInfo.GetType()

Type Lekéri az MemberInfo osztályt jelképező objektumot.

(Öröklődés forrása MemberInfo)
_MemberInfo.GetTypeInfo(UInt32, UInt32, IntPtr)

Lekéri egy objektum típusadatait, amelyek aztán a felület típusadatainak lekérésére használhatók.

(Öröklődés forrása MemberInfo)
_MemberInfo.GetTypeInfoCount(UInt32)

Lekéri az objektumok által biztosított típusinformációs felületek számát (0 vagy 1).

(Öröklődés forrása MemberInfo)
_MemberInfo.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Hozzáférést biztosít az objektumok által közzétett tulajdonságokhoz és metódusokhoz.

(Öröklődés forrása MemberInfo)
_PropertyBuilder.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

Névkészletet képez le a küldési azonosítók megfelelő készletére.

_PropertyBuilder.GetTypeInfo(UInt32, UInt32, IntPtr)

Lekéri egy objektum típusadatait, amelyek aztán a felület típusadatainak lekérésére használhatók.

_PropertyBuilder.GetTypeInfoCount(UInt32)

Lekéri az objektumok által biztosított típusinformációs felületek számát (0 vagy 1).

_PropertyBuilder.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Hozzáférést biztosít az objektumok által közzétett tulajdonságokhoz és metódusokhoz.

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

Névkészletet képez le a küldési azonosítók megfelelő készletére.

(Öröklődés forrása PropertyInfo)
_PropertyInfo.GetType()

Lekéri a Type típust PropertyInfo képviselő objektumot.

(Öröklődés forrása PropertyInfo)
_PropertyInfo.GetTypeInfo(UInt32, UInt32, IntPtr)

Lekéri egy objektum típusadatait, amelyek aztán a felület típusadatainak lekérésére használhatók.

(Öröklődés forrása PropertyInfo)
_PropertyInfo.GetTypeInfoCount(UInt32)

Lekéri az objektumok által biztosított típusinformációs felületek számát (0 vagy 1).

(Öröklődés forrása PropertyInfo)
_PropertyInfo.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Hozzáférést biztosít az objektumok által közzétett tulajdonságokhoz és metódusokhoz.

(Öröklődés forrása PropertyInfo)

Bővítő metódusok

Name Description
GetCustomAttribute(MemberInfo, Type, Boolean)

Lekéri a megadott típusú egyéni attribútumot, amely egy adott tagra lesz alkalmazva, és opcionálisan az adott tag elődeit vizsgálja meg.

GetCustomAttribute(MemberInfo, Type)

Egy megadott típusú egyéni attribútumot kér le, amelyet egy adott tagra alkalmaz.

GetCustomAttribute<T>(MemberInfo, Boolean)

Lekéri a megadott típusú egyéni attribútumot, amely egy adott tagra lesz alkalmazva, és opcionálisan az adott tag elődeit vizsgálja meg.

GetCustomAttribute<T>(MemberInfo)

Egy megadott típusú egyéni attribútumot kér le, amelyet egy adott tagra alkalmaz.

GetCustomAttributes(MemberInfo, Boolean)

Lekéri a megadott tagra alkalmazott egyéni attribútumok gyűjteményét, és opcionálisan az adott tag őseit vizsgálja meg.

GetCustomAttributes(MemberInfo, Type, Boolean)

Lekéri a megadott típusú egyéni attribútumok gyűjteményét, amelyek egy adott tagra vonatkoznak, és opcionálisan az adott tag elődeit is érintik.

GetCustomAttributes(MemberInfo, Type)

Egy megadott típusú egyéni attribútumok gyűjteményét kéri le, amelyeket egy adott tagra alkalmaz.

GetCustomAttributes(MemberInfo)

Egy adott tagra alkalmazott egyéni attribútumok gyűjteményét kéri le.

GetCustomAttributes<T>(MemberInfo, Boolean)

Lekéri a megadott típusú egyéni attribútumok gyűjteményét, amelyek egy adott tagra vonatkoznak, és opcionálisan az adott tag elődeit is érintik.

GetCustomAttributes<T>(MemberInfo)

Egy megadott típusú egyéni attribútumok gyűjteményét kéri le, amelyeket egy adott tagra alkalmaz.

IsDefined(MemberInfo, Type, Boolean)

Azt jelzi, hogy a megadott típusú egyéni attribútumok alkalmazhatók-e egy adott tagra, és szükség esetén alkalmazva vannak-e az elődökre.

IsDefined(MemberInfo, Type)

Azt jelzi, hogy a megadott típusú egyéni attribútumok alkalmazhatók-e egy adott tagra.

A következőre érvényes: