FieldBuilder Класс

Определение

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

public ref class FieldBuilder abstract : System::Reflection::FieldInfo
public ref class FieldBuilder sealed : System::Reflection::FieldInfo
public ref class FieldBuilder sealed : System::Reflection::FieldInfo, System::Runtime::InteropServices::_FieldBuilder
public abstract class FieldBuilder : System.Reflection.FieldInfo
public sealed 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 MustInherit Class FieldBuilder
Inherits FieldInfo
Public NotInheritable 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или DefineInitializedDataDefineUninitializedData.

Note

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

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

Имя Описание
FieldBuilder()

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

Свойства

Имя Описание
Attributes

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

CustomAttributes

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

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

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

FieldHandle

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

MetadataToken

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

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

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

Module

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

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

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

ReflectedType

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

Методы

Имя Описание
Equals(Object)

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

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

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

GetCustomAttributes(Type, Boolean)

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

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)

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

MemberwiseClone()

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

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

Задает значение по умолчанию этого поля.

SetConstantCore(Object)

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

SetCustomAttribute(ConstructorInfo, Byte[])

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

SetCustomAttribute(CustomAttributeBuilder)

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

SetCustomAttributeCore(ConstructorInfo, ReadOnlySpan<Byte>)

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

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

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

SetOffset(Int32)

Указывает макет поля.

SetOffsetCore(Int32)

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

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

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

SetValue(Object, Object)

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

(Унаследовано от 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, 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)

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

GetMetadataToken(MemberInfo)

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

HasMetadataToken(MemberInfo)

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

IsDefined(MemberInfo, Type, Boolean)

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

IsDefined(MemberInfo, Type)

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

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