TypeBuilder.DefineProperty Yöntem

Tanım

Türüne yeni bir özellik ekler.

Aşırı Yüklemeler

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

Türüne verilen ad ve özellik imzasıyla yeni bir özellik ekler.

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

Türüne verilen ad, öznitelikler, çağırma kuralı ve özellik imzası ile yeni bir özellik ekler.

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

Türüne verilen ad, özellik imzası ve özel değiştiricilerle yeni bir özellik ekler.

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

Türüne verilen ad, çağrı kuralı, özellik imzası ve özel değiştiricilerle yeni bir özellik ekler.

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

Kaynak:
TypeBuilder.cs
Kaynak:
TypeBuilder.cs
Kaynak:
TypeBuilder.cs

Türüne verilen ad ve özellik imzasıyla yeni bir özellik ekler.

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

Parametreler

name
String

Özelliğin adı. name katıştırılmış null içeremez.

attributes
PropertyAttributes

özelliğinin öznitelikleri.

returnType
Type

Özelliğinin dönüş türü.

parameterTypes
Type[]

özelliğinin parametrelerinin türleri.

Döndürülenler

Tanımlı özellik.

Özel durumlar

uzunluğu name sıfırdır.

name, null değeridir.

-veya-

Dizinin öğelerinden herhangi biri parameterTypes şeklindedir null.

Türü daha önce kullanılarak CreateType()oluşturulmuştur.

Örnekler

Aşağıdaki kod örneği, bir dinamik özelliği tanımlamayı ve belirtim için alma PropertyBuilder işlemini gösterir. Ayrıca, bir PropertyBuilder özelliği için IL mantığını barındıracak karşılık gelen MethodBuilderbir öğesinin de olması gerektiğini unutmayın.

C#
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'.
// -------------------

Şunlara uygulanır

.NET 9 ve diğer sürümler
Ürün Sürümler
.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[])

Kaynak:
TypeBuilder.cs
Kaynak:
TypeBuilder.cs
Kaynak:
TypeBuilder.cs

Türüne verilen ad, öznitelikler, çağırma kuralı ve özellik imzası ile yeni bir özellik ekler.

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

Parametreler

name
String

Özelliğin adı. name katıştırılmış null içeremez.

attributes
PropertyAttributes

özelliğinin öznitelikleri.

callingConvention
CallingConventions

Özellik erişimcilerinin çağrı kuralı.

returnType
Type

Özelliğinin dönüş türü.

parameterTypes
Type[]

özelliğinin parametrelerinin türleri.

Döndürülenler

Tanımlı özellik.

Özel durumlar

uzunluğu name sıfırdır.

name, null değeridir.

-veya-

Dizinin öğelerinden herhangi biri parameterTypes şeklindedir null.

Türü daha önce kullanılarak CreateType()oluşturulmuştur.

Şunlara uygulanır

.NET 9 ve diğer sürümler
Ürün Sürümler
.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[][])

Kaynak:
TypeBuilder.cs
Kaynak:
TypeBuilder.cs
Kaynak:
TypeBuilder.cs

Türüne verilen ad, özellik imzası ve özel değiştiricilerle yeni bir özellik ekler.

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

Parametreler

name
String

Özelliğin adı. name katıştırılmış null içeremez.

attributes
PropertyAttributes

özelliğinin öznitelikleri.

returnType
Type

Özelliğinin dönüş türü.

returnTypeRequiredCustomModifiers
Type[]

Özelliğin dönüş türü için gibi gerekli özel değiştiricileri IsConsttemsil eden tür dizisi. Dönüş türünde gerekli özel değiştirici yoksa belirtin null.

returnTypeOptionalCustomModifiers
Type[]

özelliğinin dönüş türü için gibi isteğe bağlı özel değiştiricileri IsConsttemsil eden tür dizisi. Dönüş türünde isteğe bağlı özel değiştirici yoksa belirtin null.

parameterTypes
Type[]

özelliğinin parametrelerinin türleri.

parameterTypeRequiredCustomModifiers
Type[][]

Tür dizileri dizisi. Her tür dizisi, gibi IsConstilgili parametre için gerekli özel değiştiricileri temsil eder. Belirli bir parametrenin gerekli özel değiştiricileri yoksa, bir tür dizisi yerine belirtin null . Parametrelerin hiçbirinin özel değiştiricileri gerekli değilse, dizi dizisi yerine belirtin null .

parameterTypeOptionalCustomModifiers
Type[][]

Tür dizileri dizisi. Her tür dizisi, IsConstgibi ilgili parametre için isteğe bağlı özel değiştiricileri temsil eder. Belirli bir parametrenin isteğe bağlı özel değiştiricisi yoksa, tür dizisi yerine belirtin null . Parametrelerin hiçbirinin isteğe bağlı özel değiştiricileri yoksa, dizi dizisi yerine belirtin null .

Döndürülenler

Tanımlı özellik.

Özel durumlar

uzunluğu name sıfırdır.

name null

-veya-

Dizinin öğelerinden herhangi biri parameterTypesnull

Türü daha önce kullanılarak CreateType()oluşturulmuştur.

Açıklamalar

Bu aşırı yükleme, yönetilen derleyici tasarımcıları için sağlanır.

Not

Özel değiştiriciler hakkında daha fazla bilgi için bkz. ECMA C# ve Ortak Dil Altyapısı Standartları ve Standart ECMA-335 - Ortak Dil Altyapısı (CLI).

Şunlara uygulanır

.NET 9 ve diğer sürümler
Ürün Sürümler
.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[][])

Kaynak:
TypeBuilder.cs
Kaynak:
TypeBuilder.cs
Kaynak:
TypeBuilder.cs

Türüne verilen ad, çağrı kuralı, özellik imzası ve özel değiştiricilerle yeni bir özellik ekler.

C#
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);
C#
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);

Parametreler

name
String

Özelliğin adı. name katıştırılmış null içeremez.

attributes
PropertyAttributes

özelliğinin öznitelikleri.

callingConvention
CallingConventions

Özellik erişimcilerinin çağrı kuralı.

returnType
Type

Özelliğinin dönüş türü.

returnTypeRequiredCustomModifiers
Type[]

Özelliğin dönüş türü için gibi gerekli özel değiştiricileri IsConsttemsil eden tür dizisi. Dönüş türünde gerekli özel değiştirici yoksa belirtin null.

returnTypeOptionalCustomModifiers
Type[]

özelliğinin dönüş türü için gibi isteğe bağlı özel değiştiricileri IsConsttemsil eden tür dizisi. Dönüş türünde isteğe bağlı özel değiştirici yoksa belirtin null.

parameterTypes
Type[]

özelliğinin parametrelerinin türleri.

parameterTypeRequiredCustomModifiers
Type[][]

Tür dizileri dizisi. Her tür dizisi, gibi IsConstilgili parametre için gerekli özel değiştiricileri temsil eder. Belirli bir parametrenin gerekli özel değiştiricileri yoksa, bir tür dizisi yerine belirtin null . Parametrelerin hiçbirinin özel değiştiricileri gerekli değilse, dizi dizisi yerine belirtin null .

parameterTypeOptionalCustomModifiers
Type[][]

Tür dizileri dizisi. Her tür dizisi, IsConstgibi ilgili parametre için isteğe bağlı özel değiştiricileri temsil eder. Belirli bir parametrenin isteğe bağlı özel değiştiricisi yoksa, tür dizisi yerine belirtin null . Parametrelerin hiçbirinin isteğe bağlı özel değiştiricileri yoksa, dizi dizisi yerine belirtin null .

Döndürülenler

Tanımlı özellik.

Özel durumlar

uzunluğu name sıfırdır.

name, null değeridir.

-veya-

Dizinin öğelerinden herhangi biri parameterTypes şeklindedir null.

Türü daha önce kullanılarak CreateType()oluşturulmuştur.

Açıklamalar

Bu aşırı yükleme, yönetilen derleyici tasarımcıları için sağlanır.

Not

Özel değiştiriciler hakkında daha fazla bilgi için bkz. ECMA C# ve Ortak Dil Altyapısı Standartları ve Standart ECMA-335 - Ortak Dil Altyapısı (CLI).

Bu yöntem aşırı yüklemesi, .NET Framework 3.5 veya sonraki sürümlerde kullanıma sunulmuştur.

Şunlara uygulanır

.NET 9 ve diğer sürümler
Ürün Sürümler
.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