Поделиться через


FieldBuilder Класс

Определение

Определяет и предоставляет поле. Этот класс не наследуется.

public ref class FieldBuilder sealed : System::Reflection::FieldInfo
public ref class FieldBuilder abstract : System::Reflection::FieldInfo
public ref class FieldBuilder sealed : System::Reflection::FieldInfo, System::Runtime::InteropServices::_FieldBuilder
public sealed class FieldBuilder : System.Reflection.FieldInfo
public abstract class FieldBuilder : System.Reflection.FieldInfo
[System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)]
public sealed class FieldBuilder : System.Reflection.FieldInfo, System.Runtime.InteropServices._FieldBuilder
[System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)]
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class FieldBuilder : System.Reflection.FieldInfo, System.Runtime.InteropServices._FieldBuilder
type FieldBuilder = class
    inherit FieldInfo
[<System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)>]
type FieldBuilder = class
    inherit FieldInfo
    interface _FieldBuilder
[<System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type FieldBuilder = class
    inherit FieldInfo
    interface _FieldBuilder
Public NotInheritable Class FieldBuilder
Inherits FieldInfo
Public MustInherit Class FieldBuilder
Inherits FieldInfo
Public NotInheritable Class FieldBuilder
Inherits FieldInfo
Implements _FieldBuilder
Наследование
FieldBuilder
Атрибуты
Реализации

Примеры

В следующем примере показано использование FieldBuilder класса .

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

public class FieldBuilder_Sample
{
    private static Type? CreateType()
    {
        // Create an assembly.
        AssemblyName assemName = new AssemblyName();
        assemName.Name = "DynamicAssembly";
        AssemblyBuilder assemBuilder =
                       AssemblyBuilder.DefineDynamicAssembly(assemName, AssemblyBuilderAccess.Run);
        // Create a dynamic module in Dynamic Assembly.
        ModuleBuilder modBuilder = assemBuilder.DefineDynamicModule("DynamicModule");
        // Define a public class named "DynamicClass" in the assembly.
        TypeBuilder typBuilder = modBuilder.DefineType("DynamicClass", TypeAttributes.Public);

        // Define a private String field named "DynamicField" in the type.
        FieldBuilder fldBuilder = typBuilder.DefineField("DynamicField",
            typeof(string), FieldAttributes.Private | FieldAttributes.Static);
        // Create the constructor.
        Type[] constructorArgs = { typeof(String) };
        ConstructorBuilder constructor = typBuilder.DefineConstructor(
           MethodAttributes.Public, CallingConventions.Standard, constructorArgs);
        ILGenerator constructorIL = constructor.GetILGenerator();
        constructorIL.Emit(OpCodes.Ldarg_0);
        ConstructorInfo? superConstructor = typeof(Object).GetConstructor(new Type[0]);
        constructorIL.Emit(OpCodes.Call, superConstructor!);
        constructorIL.Emit(OpCodes.Ldarg_0);
        constructorIL.Emit(OpCodes.Ldarg_1);
        constructorIL.Emit(OpCodes.Stfld, fldBuilder);
        constructorIL.Emit(OpCodes.Ret);

        // Create the DynamicMethod method.
        MethodBuilder methBuilder = typBuilder.DefineMethod("DynamicMethod",
                             MethodAttributes.Public, typeof(String), null);
        ILGenerator methodIL = methBuilder.GetILGenerator();
        methodIL.Emit(OpCodes.Ldarg_0);
        methodIL.Emit(OpCodes.Ldfld, fldBuilder);
        methodIL.Emit(OpCodes.Ret);

        Console.WriteLine($"Name               : {fldBuilder.Name}");
        Console.WriteLine($"DeclaringType      : {fldBuilder.DeclaringType}");
        Console.WriteLine($"Type               : {fldBuilder.FieldType}");
        return typBuilder.CreateType();
    }

    public static void Main()
    {
        Type? dynType = CreateType();
        try
        {
            if (dynType is not null)
            {
                // Create an instance of the "HelloWorld" class.
                Object? helloWorld = Activator.CreateInstance(dynType, new Object[] { "HelloWorld" });
                // Invoke the "DynamicMethod" method of the "DynamicClass" class.
                Object? obj = dynType.InvokeMember("DynamicMethod",
                               BindingFlags.InvokeMethod, null, helloWorld, null);
                Console.WriteLine($"DynamicClass.DynamicMethod returned: \"{obj}\"");
            }
        }
        catch (MethodAccessException e)
        {
            Console.WriteLine($"{e.GetType().Name}: {e.Message}");
        }
    }
}
Imports System.Reflection
Imports System.Reflection.Emit

Public Module FieldBuilder_Sample
   Private Function CreateType() As Type
      ' Create an assembly.
      Dim assemName As New AssemblyName()
      assemName.Name = "DynamicAssembly"
      Dim assemBuilder As AssemblyBuilder = AssemblyBuilder.DefineDynamicAssembly(assemName,
                                                AssemblyBuilderAccess.Run)
      ' Create a dynamic module in Dynamic Assembly.
      Dim modBuilder As ModuleBuilder = assemBuilder.DefineDynamicModule("DynamicModule")
      ' Define a public class named "DynamicClass" in the assembly.
      Dim typBuilder As TypeBuilder = modBuilder.DefineType("DynamicClass", 
                                          TypeAttributes.Public)
      ' Define a private String field named "DynamicField" in the type.
      Dim fldBuilder As FieldBuilder = typBuilder.DefineField("DynamicField",
                  GetType(String), FieldAttributes.Private Or FieldAttributes.Static)
      ' Create the constructor.
      Dim constructorArgs As Type() = {GetType(String)}
      Dim constructor As ConstructorBuilder = 
                  typBuilder.DefineConstructor(MethodAttributes.Public, 
                           CallingConventions.Standard, constructorArgs)
      Dim constructorIL As ILGenerator = constructor.GetILGenerator()
      constructorIL.Emit(OpCodes.Ldarg_0)
      Dim superConstructor As ConstructorInfo = GetType(Object).GetConstructor(New Type() {})
      constructorIL.Emit(OpCodes.Call, superConstructor)
      constructorIL.Emit(OpCodes.Ldarg_0)
      constructorIL.Emit(OpCodes.Ldarg_1)
      constructorIL.Emit(OpCodes.Stfld, fldBuilder)
      constructorIL.Emit(OpCodes.Ret)

      ' Create the DynamicMethod method.
      Dim methBuilder As MethodBuilder = typBuilder.DefineMethod("DynamicMethod", 
                        MethodAttributes.Public, GetType(String), Nothing)
      Dim methodIL As ILGenerator = methBuilder.GetILGenerator()
      methodIL.Emit(OpCodes.Ldarg_0)
      methodIL.Emit(OpCodes.Ldfld, fldBuilder)
      methodIL.Emit(OpCodes.Ret)

      Console.WriteLine($"Name               : {fldBuilder.Name}")
      Console.WriteLine($"DeclaringType      : {fldBuilder.DeclaringType}")
      Console.WriteLine($"Type               : {fldBuilder.FieldType}")
      Return typBuilder.CreateType()
   End Function 

   Public Sub Main()
      Dim dynType As Type = CreateType()
      Try  
        ' Create an instance of the "HelloWorld" class.
         Dim helloWorld As Object = Activator.CreateInstance(dynType, New Object() {"HelloWorld"})
         ' Invoke the "DynamicMethod" method of the "DynamicClass" class.
         Dim obj As Object = dynType.InvokeMember("DynamicMethod", 
                  BindingFlags.InvokeMethod, Nothing, helloWorld, Nothing)
         Console.WriteLine($"DynamicClass.DynamicMethod returned: ""{obj}""")
      Catch e As MethodAccessException
            Console.WriteLine($"{e.GetType().Name}: {e.Message}")
      End Try
   End Sub 
End Module

Комментарии

Получите экземпляр , FieldBuilder вызвав DefineField, DefineInitializedDataили DefineUninitializedData.

Примечание

Метод SetValue в настоящее время не поддерживается. В качестве обходного решения извлеките FieldInfo , отражая готовый тип, и вызовите SetValue , чтобы задать значение поля.

Конструкторы

FieldBuilder()

Инициализирует новый экземпляр класса FieldBuilder.

Свойства

Attributes

Указывает атрибуты данного поля. Это свойство доступно только для чтения.

CustomAttributes

Получает коллекцию, содержащую пользовательские атрибуты этого члена.

(Унаследовано от MemberInfo)
DeclaringType

Указывает ссылку на объект Type типа, которым объявлено данное поле. Это свойство доступно только для чтения.

FieldHandle

Указывает внутренний дескриптор метаданных для данного поля. Это свойство доступно только для чтения.

FieldHandle

Возвращает дескриптор RuntimeFieldHandle, являющийся дескриптором представления внутренних метаданных поля.

(Унаследовано от FieldInfo)
FieldType

Указывает объект Type, предоставляющий тип данного поля. Это свойство доступно только для чтения.

IsAssembly

Возвращает значение, которое указывает, описана ли доступность данного поля в поле Assembly; другими словами, будет ли это поле полностью доступно для других полей той же сборки и недоступно для производных типов, не включенных в сборку.

(Унаследовано от FieldInfo)
IsCollectible

Получает значение, указывающее, является ли объект MemberInfo частью сборки, содержащейся в забираемом контексте AssemblyLoadContext.

(Унаследовано от MemberInfo)
IsFamily

Возвращает значение, которое указывает, описана ли доступность этого поля в поле Family; другими словами, будет ли это поле доступно только в своем классе и производных классах.

(Унаследовано от FieldInfo)
IsFamilyAndAssembly

Возвращает значение, которое указывает, описана ли доступность этого поля в поле FamANDAssem; другими словами, будет ли это поле доступно только в производных классах, которые включены в ту же сборку.

(Унаследовано от FieldInfo)
IsFamilyOrAssembly

Возвращает значение, которое указывает, описана ли потенциальная доступность этого поля в поле FamORAssem; другими словами, будет ли это поле доступно в производных классах независимо от их местонахождения, а также в классах, которые включены в ту же сборку.

(Унаследовано от FieldInfo)
IsInitOnly

Возвращает значение, которое определяет, устанавливается ли поле только в тексте сообщения конструктора.

(Унаследовано от FieldInfo)
IsLiteral

Возвращает значение, показывающее, что значение записывается во время компиляции и не может быть изменено.

(Унаследовано от FieldInfo)
IsNotSerialized
Устаревшие..

Возвращает значение, указывающее, установлен ли для этого поля атрибут NotSerialized.

(Унаследовано от FieldInfo)
IsPinvokeImpl

Возвращает значение, указывающее, установлен ли в FieldAttributes соответствующий атрибут PinvokeImpl.

(Унаследовано от FieldInfo)
IsPrivate

Возвращает значение, указывающее, является ли поле закрытым.

(Унаследовано от FieldInfo)
IsPublic

Возвращает значение, указывающее, является ли поле открытым.

(Унаследовано от FieldInfo)
IsSecurityCritical

Получает значение, которое указывает, является ли текущее поле критически важным для безопасности или защищенным критически важным для безопасности на данном уровне доверия.

(Унаследовано от FieldInfo)
IsSecuritySafeCritical

Получает значение, которое указывает, является ли текущее поле защищенным критически важным для безопасности на данном уровне доверия.

(Унаследовано от FieldInfo)
IsSecurityTransparent

Получает значение, которое указывает, является ли текущее поле прозрачным на данном уровне доверия.

(Унаследовано от FieldInfo)
IsSpecialName

Возвращает значение, указывающее, установлен ли в перечислителе FieldAttributes соответствующий атрибут SpecialName.

(Унаследовано от FieldInfo)
IsStatic

Возвращает значение, указывающее, является ли поле статическим.

(Унаследовано от FieldInfo)
MemberType

Возвращает значение MemberTypes, указывающее, что этот элемент является полем.

(Унаследовано от FieldInfo)
MetadataToken

Получает токен, который определяет текущий динамический модуль в метаданных.

MetadataToken

Получает значение, определяющее элемент метаданных.

(Унаследовано от MemberInfo)
Module

Возвращает модуль, в котором определяется тип, содержащий это поле.

Module

Получает модуль, в котором определяется тип, объявляющий член, представленный текущим объектом MemberInfo.

(Унаследовано от MemberInfo)
Name

Указывает имя данного поля. Это свойство доступно только для чтения.

ReflectedType

Дает ссылку на объект Type, откуда был получен данный объект. Это свойство доступно только для чтения.

ReflectedType

Получает объект класса, который использовался для извлечения данного экземпляра объекта MemberInfo.

(Унаследовано от MemberInfo)

Методы

Equals(Object)

Возвращает значение, показывающее, равен ли экземпляр указанному объекту.

(Унаследовано от FieldInfo)
GetCustomAttributes(Boolean)

Возвращает все пользовательские атрибуты, определенные для данного поля.

GetCustomAttributes(Boolean)

При переопределении в производном классе возвращает массив всех настраиваемых атрибутов, примененных к данному члену.

(Унаследовано от MemberInfo)
GetCustomAttributes(Type, Boolean)

Возвращает все пользовательские атрибуты, определенные для данного поля, идентифицируемого указанным типом.

GetCustomAttributes(Type, Boolean)

При переопределении в производном классе возвращает массив настраиваемых атрибутов, применяемых к этому элементу и определяемых параметром Type.

(Унаследовано от MemberInfo)
GetCustomAttributesData()

Возвращает список объектов CustomAttributeData, представляющих данные об атрибутах, примененных к целевому элементу.

(Унаследовано от MemberInfo)
GetHashCode()

Возвращает хэш-код данного экземпляра.

(Унаследовано от FieldInfo)
GetModifiedFieldType()

Возвращает измененный тип этого объекта поля.

(Унаследовано от FieldInfo)
GetOptionalCustomModifiers()

Возвращает массив типов, определяющих необязательные настраиваемые модификаторы для поля.

(Унаследовано от FieldInfo)
GetRawConstantValue()

Метод возвращает литеральное значение, связанное с этим свойством компилятором.

(Унаследовано от FieldInfo)
GetRequiredCustomModifiers()

Возвращает массив типов, определяющих обязательные настраиваемые модификаторы для свойства.

(Унаследовано от FieldInfo)
GetToken()

Возвращает токен, представляющий данное поле.

GetType()

Обнаруживает атрибуты поля класса и обеспечивает доступ к его метаданным.

(Унаследовано от FieldInfo)
GetValue(Object)

Извлекает значение поля для указанного объекта.

GetValueDirect(TypedReference)

Возвращает значение поля, поддерживаемого заданным объектом.

(Унаследовано от FieldInfo)
HasSameMetadataDefinitionAs(MemberInfo)

Определяет и предоставляет поле. Этот класс не наследуется.

(Унаследовано от MemberInfo)
IsDefined(Type, Boolean)

Показывает, определен ли для поля атрибут указанного типа.

IsDefined(Type, Boolean)

При переопределении в производном классе указывает, применяются ли для этого члена один или несколько атрибутов заданного типа или его производных типов.

(Унаследовано от MemberInfo)
MemberwiseClone()

Создает неполную копию текущего объекта Object.

(Унаследовано от Object)
SetConstant(Object)

Устанавливает значение, присваиваемое полю по умолчанию.

SetConstantCore(Object)

При переопределении в производном классе задает значение по умолчанию для этого поля.

SetCustomAttribute(ConstructorInfo, Byte[])

Задает настраиваемый атрибут с помощью большого двоичного объекта пользовательских атрибутов.

SetCustomAttribute(CustomAttributeBuilder)

Задает настраиваемый атрибут с помощью построителя настраиваемых атрибутов.

SetCustomAttributeCore(ConstructorInfo, ReadOnlySpan<Byte>)

При переопределении в производном классе задает настраиваемый атрибут для этой сборки.

SetMarshal(UnmanagedMarshal)
Устаревшие..

Описывает присущий данному объекту маршалинг поля.

SetOffset(Int32)

Устанавливает расположение поля.

SetOffsetCore(Int32)

При переопределении в производном классе задает макет поля.

SetValue(Object, Object)

Задает значение поля, которое поддерживается указанным объектом.

(Унаследовано от FieldInfo)
SetValue(Object, Object, BindingFlags, Binder, CultureInfo)

Задает значение поля, которое поддерживается указанным объектом.

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

Если переопределен производным классом, устанавливает значение поля, поддерживаемое данным объектом.

(Унаследовано от FieldInfo)
SetValueDirect(TypedReference, Object)

Задает значение поля, которое поддерживается указанным объектом.

(Унаследовано от FieldInfo)
ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)

Явные реализации интерфейса

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

Сопоставляет набор имен соответствующему набору идентификаторов диспетчеризации.

_FieldBuilder.GetTypeInfo(UInt32, UInt32, IntPtr)

Возвращает сведения о типе объекта, которые затем могут использоваться для получения сведений о типе интерфейса.

_FieldBuilder.GetTypeInfoCount(UInt32)

Возвращает количество предоставляемых объектом интерфейсов для доступа к сведениям о типе (0 или 1).

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

Предоставляет доступ к открытым свойствам и методам объекта.

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

Сопоставляет набор имен соответствующему набору идентификаторов диспетчеризации.

(Унаследовано от FieldInfo)
_FieldInfo.GetType()

Возвращает объект Type, представляющий тип FieldInfo.

(Унаследовано от FieldInfo)
_FieldInfo.GetTypeInfo(UInt32, UInt32, IntPtr)

Возвращает сведения о типе объекта, которые затем могут использоваться для получения сведений о типе интерфейса.

(Унаследовано от FieldInfo)
_FieldInfo.GetTypeInfoCount(UInt32)

Возвращает количество предоставляемых объектом интерфейсов для доступа к сведениям о типе (0 или 1).

(Унаследовано от FieldInfo)
_FieldInfo.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Предоставляет доступ к открытым свойствам и методам объекта.

(Унаследовано от FieldInfo)
_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)
ICustomAttributeProvider.GetCustomAttributes(Boolean)

Возвращает массив всех настраиваемых атрибутов, определенных для этого элемента, за исключением именованных атрибутов, или пустой массив, если атрибуты отсутствуют.

(Унаследовано от MemberInfo)
ICustomAttributeProvider.GetCustomAttributes(Type, Boolean)

Возвращает массив настраиваемых атрибутов, определенных для этого элемента с учетом типа, или пустой массив, если отсутствуют настраиваемые атрибуты определенного типа.

(Унаследовано от MemberInfo)
ICustomAttributeProvider.IsDefined(Type, Boolean)

Указывает, сколько экземпляров attributeType определено для этого элемента.

(Унаследовано от MemberInfo)

Методы расширения

GetCustomAttribute(MemberInfo, Type)

Извлекает пользовательский атрибут заданного типа, примененный к указанному элементу.

GetCustomAttribute(MemberInfo, Type, Boolean)

Извлекает настраиваемый атрибут указанного типа, который применяется к указанному элементу и, при необходимости, проверяет предков этого элемента.

GetCustomAttribute<T>(MemberInfo)

Извлекает пользовательский атрибут заданного типа, примененный к указанному элементу.

GetCustomAttribute<T>(MemberInfo, Boolean)

Извлекает настраиваемый атрибут указанного типа, который применяется к указанному элементу и, при необходимости, проверяет предков этого элемента.

GetCustomAttributes(MemberInfo)

Извлекает коллекцию настраиваемых атрибутов, примененных к указанному члену.

GetCustomAttributes(MemberInfo, Boolean)

Извлекает коллекцию пользовательских атрибутов, которые применяются к указанному элементу и, при необходимости, проверяет предков этого элемента.

GetCustomAttributes(MemberInfo, Type)

Извлекает коллекцию пользовательских атрибутов заданного типа, примененных к указанному элементу.

GetCustomAttributes(MemberInfo, Type, Boolean)

Извлекает коллекцию пользовательских атрибутов указанного типа, которые применяется к указанному элементу и, при необходимости, проверяет предков этого элемента.

GetCustomAttributes<T>(MemberInfo)

Извлекает коллекцию пользовательских атрибутов заданного типа, примененных к указанному элементу.

GetCustomAttributes<T>(MemberInfo, Boolean)

Извлекает коллекцию пользовательских атрибутов указанного типа, которые применяется к указанному элементу и, при необходимости, проверяет предков этого элемента.

IsDefined(MemberInfo, Type)

Указывает, применены ли какие-либо пользовательские атрибуты заданного типа к указанному члену.

IsDefined(MemberInfo, Type, Boolean)

Указывает применены ли настраиваемые атрибуты указанного типа к указанному элементу и, при необходимости, применены ли они к его предкам.

GetMetadataToken(MemberInfo)

Возвращает маркер метаданных для заданного элемента, если он доступен.

HasMetadataToken(MemberInfo)

Возвращает значение, указывающее, доступен ли маркер метаданных для указанного элемента.

Применяется к