PropertyBuilder Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Определяет свойства для типа.
public ref class PropertyBuilder abstract : System::Reflection::PropertyInfo
public ref class PropertyBuilder sealed : System::Reflection::PropertyInfo
public ref class PropertyBuilder sealed : System::Reflection::PropertyInfo, System::Runtime::InteropServices::_PropertyBuilder
public abstract class PropertyBuilder : System.Reflection.PropertyInfo
public sealed class PropertyBuilder : 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
type PropertyBuilder = class
inherit 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
Public MustInherit Class PropertyBuilder
Inherits PropertyInfo
Public NotInheritable Class PropertyBuilder
Inherits PropertyInfo
Public NotInheritable Class PropertyBuilder
Inherits PropertyInfo
Implements _PropertyBuilder
- Наследование
- Атрибуты
- Реализации
Примеры
В следующем примере кода показано, как реализовать свойства в динамическом типе с помощью полученной PropertyBuilder платформы TypeBuilder.DefineProperty свойств и связанной MethodBuilder с реализацией логики IL в свойстве.
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'.
' -------------------
Комментарии
Всегда PropertyBuilder связан с .TypeBuilder Объект TypeBuilder.
DefineProperty метод возвращает новый PropertyBuilder клиенту.
Конструкторы
| Имя | Описание |
|---|---|
| PropertyBuilder() |
Инициализирует новый экземпляр класса PropertyBuilder. |
Свойства
| Имя | Описание |
|---|---|
| Attributes |
Возвращает атрибуты для этого свойства. |
| CanRead |
Возвращает значение, указывающее, можно ли считывать свойство. |
| CanWrite |
Возвращает значение, указывающее, можно ли записать свойство в. |
| CustomAttributes |
Возвращает коллекцию, содержащую настраиваемые атрибуты этого члена. (Унаследовано от MemberInfo) |
| DeclaringType |
Возвращает класс, объявляющий этот член. |
| GetMethod |
|
| IsCollectible |
Возвращает значение, указывающее, ссылается ли этот MemberInfo объект на одну или несколько сборок, содержащихся в коллекционируемых AssemblyLoadContextобъектах. (Унаследовано от MemberInfo) |
| IsSpecialName |
Возвращает значение, указывающее, является ли свойство специальным именем. (Унаследовано от PropertyInfo) |
| MemberType |
MemberTypes Возвращает значение, указывающее, что этот элемент является свойством. (Унаследовано от PropertyInfo) |
| MetadataToken |
Возвращает значение, определяющее элемент метаданных. (Унаследовано от MemberInfo) |
| Module |
Возвращает модуль, в котором определяется тип, объявляющий текущее свойство. |
| Module |
Возвращает модуль, в котором определяется тип, объявляющий элемент, представленный текущим MemberInfo . (Унаследовано от MemberInfo) |
| Name |
Возвращает имя этого элемента. |
| PropertyToken |
Извлекает маркер для этого свойства. |
| PropertyType |
Возвращает тип поля этого свойства. |
| ReflectedType |
Возвращает объект класса, используемый для получения этого экземпляра |
| SetMethod |
|
Методы
| Имя | Описание |
|---|---|
| AddOtherMethod(MethodBuilder) |
Добавляет один из других методов, связанных с этим свойством. |
| AddOtherMethodCore(MethodBuilder) |
При переопределении в производном классе добавляет один из других методов, связанных с этим свойством. |
| Equals(Object) |
Возвращает значение, указывающее, равен ли этот экземпляр указанному объекту. (Унаследовано от PropertyInfo) |
| GetAccessors() |
Возвращает массив, элементы которого отражают общедоступные |
| GetAccessors(Boolean) |
Возвращает массив общедоступных и недоступных |
| GetAccessors(Boolean) |
Возвращает массив, элементы которого отражают общедоступный и, если указанный, не открытый |
| GetConstantValue() |
Возвращает литеральное значение, связанное со свойством компилятором. (Унаследовано от PropertyInfo) |
| GetCustomAttributes(Boolean) |
Возвращает массив всех настраиваемых атрибутов для этого свойства. |
| GetCustomAttributes(Type, Boolean) |
Возвращает массив настраиваемых атрибутов, Typeопределенных по . |
| GetCustomAttributesData() |
Возвращает список CustomAttributeData объектов, представляющих данные о атрибутах, примененных к целевому элементу. (Унаследовано от MemberInfo) |
| GetGetMethod() |
Возвращает общедоступный |
| GetGetMethod(Boolean) |
Возвращает общедоступный и недоступный метод доступа к этому свойству. |
| GetGetMethod(Boolean) |
При переопределении в производном классе возвращает общедоступный или недоступный |
| GetHashCode() |
Возвращает хэш-код для этого экземпляра. (Унаследовано от PropertyInfo) |
| GetIndexParameters() |
Возвращает массив всех параметров индекса для свойства. |
| GetModifiedPropertyType() |
Возвращает измененный тип объекта свойства. (Унаследовано от PropertyInfo) |
| GetOptionalCustomModifiers() |
Возвращает массив типов, представляющих необязательные настраиваемые модификаторы свойства. (Унаследовано от PropertyInfo) |
| GetRawConstantValue() |
Возвращает литеральное значение, связанное со свойством компилятором. (Унаследовано от PropertyInfo) |
| GetRequiredCustomModifiers() |
Возвращает массив типов, представляющих необходимые настраиваемые модификаторы свойства. (Унаследовано от PropertyInfo) |
| GetSetMethod() |
Возвращает общедоступный |
| GetSetMethod(Boolean) |
Возвращает метод доступа набора для этого свойства. |
| GetSetMethod(Boolean) |
При переопределении в производном классе возвращает |
| GetType() |
Обнаруживает атрибуты свойства и предоставляет доступ к метаданным свойств. (Унаследовано от PropertyInfo) |
| GetValue(Object, BindingFlags, Binder, Object[], CultureInfo) |
Возвращает значение свойства, имеющего указанную привязку, индекс и |
| GetValue(Object, Object[]) |
Возвращает значение индексированного свойства путем вызова метода получения свойства. |
| GetValue(Object) |
Возвращает значение свойства указанного объекта. (Унаследовано от PropertyInfo) |
| HasSameMetadataDefinitionAs(MemberInfo) |
Определяет свойства для типа. (Унаследовано от MemberInfo) |
| IsDefined(Type, Boolean) |
Указывает, определен ли один или несколько экземпляров |
| MemberwiseClone() |
Создает неглубокую копию текущей Object. (Унаследовано от Object) |
| SetConstant(Object) |
Задает значение по умолчанию этого свойства. |
| SetConstantCore(Object) |
При переопределении в производном классе задает значение по умолчанию этого свойства. |
| SetCustomAttribute(ConstructorInfo, Byte[]) |
Задайте настраиваемый атрибут с помощью указанного пользовательского blob-объекта атрибута. |
| SetCustomAttribute(CustomAttributeBuilder) |
Задайте настраиваемый атрибут с помощью построителя настраиваемых атрибутов. |
| SetCustomAttributeCore(ConstructorInfo, ReadOnlySpan<Byte>) |
При переопределении в производном классе задает настраиваемый атрибут для этой сборки. |
| SetGetMethod(MethodBuilder) |
Задает метод, который получает значение свойства. |
| SetGetMethodCore(MethodBuilder) |
При переопределении в производном классе задает метод, который получает значение свойства. |
| SetSetMethod(MethodBuilder) |
Задает метод, который задает значение свойства. |
| SetSetMethodCore(MethodBuilder) |
При переопределении в производном классе задает метод, который задает значение свойства. |
| SetValue(Object, Object, BindingFlags, Binder, Object[], CultureInfo) |
Задает значение свойства для заданного объекта заданному значению. |
| SetValue(Object, Object, Object[]) |
Задает значение свойства с необязательными значениями индекса для свойств индекса. |
| SetValue(Object, Object) |
Задает значение свойства указанного объекта. (Унаследовано от PropertyInfo) |
| ToString() |
Возвращает строку, представляющую текущий объект. (Унаследовано от Object) |
Явные реализации интерфейса
| Имя | Описание |
|---|---|
| _MemberInfo.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) |
Сопоставляет набор имен соответствующему набору идентификаторов диспетчеризации. (Унаследовано от MemberInfo) |
| _MemberInfo.GetType() |
Type Возвращает объект, MemberInfo представляющий класс. (Унаследовано от MemberInfo) |
| _MemberInfo.GetTypeInfo(UInt32, UInt32, IntPtr) |
Возвращает сведения о типе объекта, которые затем могут использоваться для получения сведений о типе интерфейса. (Унаследовано от MemberInfo) |
| _MemberInfo.GetTypeInfoCount(UInt32) |
Возвращает количество предоставляемых объектом интерфейсов для доступа к сведениям о типе (0 или 1). (Унаследовано от MemberInfo) |
| _MemberInfo.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) |
Предоставляет доступ к свойствам и методам, предоставляемым объектом. (Унаследовано от MemberInfo) |
| _PropertyBuilder.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) |
Сопоставляет набор имен соответствующему набору идентификаторов диспетчеризации. |
| _PropertyBuilder.GetTypeInfo(UInt32, UInt32, IntPtr) |
Возвращает сведения о типе объекта, которые затем могут использоваться для получения сведений о типе интерфейса. |
| _PropertyBuilder.GetTypeInfoCount(UInt32) |
Возвращает количество предоставляемых объектом интерфейсов для доступа к сведениям о типе (0 или 1). |
| _PropertyBuilder.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) |
Предоставляет доступ к свойствам и методам, предоставляемым объектом. |
| _PropertyInfo.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) |
Сопоставляет набор имен соответствующему набору идентификаторов диспетчеризации. (Унаследовано от PropertyInfo) |
| _PropertyInfo.GetType() |
Type Возвращает объект, PropertyInfo представляющий тип. (Унаследовано от PropertyInfo) |
| _PropertyInfo.GetTypeInfo(UInt32, UInt32, IntPtr) |
Возвращает сведения о типе объекта, которые затем могут использоваться для получения сведений о типе интерфейса. (Унаследовано от PropertyInfo) |
| _PropertyInfo.GetTypeInfoCount(UInt32) |
Возвращает количество предоставляемых объектом интерфейсов для доступа к сведениям о типе (0 или 1). (Унаследовано от PropertyInfo) |
| _PropertyInfo.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) |
Предоставляет доступ к свойствам и методам, предоставляемым объектом. (Унаследовано от PropertyInfo) |
| ICustomAttributeProvider.GetCustomAttributes(Boolean) |
Возвращает массив всех пользовательских атрибутов, определенных для этого элемента, за исключением именованных атрибутов или пустого массива, если нет пользовательских атрибутов. (Унаследовано от MemberInfo) |
| ICustomAttributeProvider.GetCustomAttributes(Type, Boolean) |
Возвращает массив пользовательских атрибутов, определенных на этом элементе, определяемый по типу или пустой массив, если пользовательские атрибуты этого типа отсутствуют. (Унаследовано от MemberInfo) |
| ICustomAttributeProvider.IsDefined(Type, Boolean) |
Указывает, определен ли один или несколько экземпляров |
Методы расширения
| Имя | Описание |
|---|---|
| GetAccessors(PropertyInfo, Boolean) |
Определяет свойства для типа. |
| GetAccessors(PropertyInfo) |
Определяет свойства для типа. |
| GetCustomAttribute(MemberInfo, Type, Boolean) |
Извлекает настраиваемый атрибут указанного типа, применяемого к указанному элементу, и при необходимости проверяет предки этого элемента. |
| GetCustomAttribute(MemberInfo, Type) |
Извлекает настраиваемый атрибут указанного типа, применяемого к указанному элементу. |
| GetCustomAttribute<T>(MemberInfo, Boolean) |
Извлекает настраиваемый атрибут указанного типа, применяемого к указанному элементу, и при необходимости проверяет предки этого элемента. |
| GetCustomAttribute<T>(MemberInfo) |
Извлекает настраиваемый атрибут указанного типа, применяемого к указанному элементу. |
| GetCustomAttributes(MemberInfo, Boolean) |
Извлекает коллекцию настраиваемых атрибутов, применяемых к указанному элементу, и при необходимости проверяет предки этого элемента. |
| GetCustomAttributes(MemberInfo, Type, Boolean) |
Извлекает коллекцию настраиваемых атрибутов указанного типа, применяемого к указанному элементу, и при необходимости проверяет предки этого элемента. |
| GetCustomAttributes(MemberInfo, Type) |
Извлекает коллекцию настраиваемых атрибутов указанного типа, применяемого к указанному элементу. |
| GetCustomAttributes(MemberInfo) |
Извлекает коллекцию настраиваемых атрибутов, применяемых к указанному элементу. |
| GetCustomAttributes<T>(MemberInfo, Boolean) |
Извлекает коллекцию настраиваемых атрибутов указанного типа, применяемого к указанному элементу, и при необходимости проверяет предки этого элемента. |
| GetCustomAttributes<T>(MemberInfo) |
Извлекает коллекцию настраиваемых атрибутов указанного типа, применяемого к указанному элементу. |
| GetGetMethod(PropertyInfo, Boolean) |
Определяет свойства для типа. |
| GetGetMethod(PropertyInfo) |
Определяет свойства для типа. |
| GetMetadataToken(MemberInfo) |
Возвращает маркер метаданных для данного члена, если он доступен. |
| GetSetMethod(PropertyInfo, Boolean) |
Определяет свойства для типа. |
| GetSetMethod(PropertyInfo) |
Определяет свойства для типа. |
| HasMetadataToken(MemberInfo) |
Возвращает значение, указывающее, доступен ли маркер метаданных для указанного элемента. |
| IsDefined(MemberInfo, Type, Boolean) |
Указывает, применяются ли пользовательские атрибуты указанного типа к указанному элементу и, при необходимости, применяются к его предкам. |
| IsDefined(MemberInfo, Type) |
Указывает, применяются ли пользовательские атрибуты указанного типа к указанному элементу. |