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

備註

藉由呼叫 DefineFieldDefineInitializedDataDefineUninitializedData 來取得 的實例 FieldBuilder

注意

目前 SetValue 不支援方法。 因應措施是透過 FieldInfo 反映已完成的類型和呼叫 SetValue 來設定欄位的值來擷取 。

建構函式

FieldBuilder()

初始化 FieldBuilder 類別的新執行個體。

屬性

Attributes

指出這個欄位的屬性 (Attribute)。 這個屬性是唯讀的。

CustomAttributes

取得包含此成員之自訂屬性的集合。

(繼承來源 MemberInfo)
DeclaringType

指出型別的 Type 物件參考,這個型別會宣告這個欄位。 這個屬性是唯讀的。

FieldHandle

指出這個欄位的內部中繼資料 (Metadata) 控制代碼。 這個屬性是唯讀的。

FieldHandle

取得 RuntimeFieldHandle,它是欄位內部中繼資料表示的控制代碼。

(繼承來源 FieldInfo)
FieldType

指出 Type 物件,表示這個欄位的型別。 這個屬性是唯讀的。

IsAssembly

取得值,指出 Assembly 是否描述此欄位的潛在可視性;亦即,最多只有相同組件 (Assembly) 中的其他型別可以看見該欄位,組件外部的衍生型別 (Derived Type) 則看不見它。

(繼承來源 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

取得值,指出在 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()

傳回表示這個欄位的語彙基元 (Token)。

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[])

使用指定的自訂屬性 Blob 來設定自訂屬性。

SetCustomAttribute(CustomAttributeBuilder)

使用自訂屬性產生器來設定自訂屬性。

SetCustomAttributeCore(ConstructorInfo, ReadOnlySpan<Byte>)

在衍生類別中覆寫時,在此元件上設定自訂屬性。

SetMarshal(UnmanagedMarshal)
已淘汰.

描述欄位的原生封送處理 (Native Marshaling)。

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)

將一組名稱對應至一組對應的分派識別項 (Dispatch Identifier)。

_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)

將一組名稱對應至一組對應的分派識別項 (Dispatch Identifier)。

(繼承來源 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)

將一組名稱對應至一組對應的分派識別項 (Dispatch Identifier)。

(繼承來源 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)

傳回值,指出所指定成員是否有可用的中繼資料語彙基元。

適用於