FieldBuilder 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
定義和表示欄位。 此類別無法獲得繼承。
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
。
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
備註
藉由呼叫DefineField、 DefineInitializedData或 DefineUninitializedData來取得的實例FieldBuilder
。
建構函式
FieldBuilder() |
初始化 FieldBuilder 類別的新執行個體。 |
屬性
Attributes |
指出這個欄位的屬性 (Attribute)。 這個屬性是唯讀的。 |
CustomAttributes |
取得包含此成員之自訂屬性的集合。 (繼承來源 MemberInfo) |
DeclaringType |
指出型別的 Type 物件參考,這個型別會宣告這個欄位。 這個屬性是唯讀的。 |
FieldHandle |
指出這個欄位的內部中繼資料 (Metadata) 控制代碼。 這個屬性是唯讀的。 |
FieldHandle |
取得 |
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 |
已淘汰.
取得值,指出這個欄位是否有 |
IsPinvokeImpl |
取得值,指出對應的 |
IsPrivate |
取得值,指出欄位是否為私用的。 (繼承來源 FieldInfo) |
IsPublic |
取得值,指出欄位是否為公用的。 (繼承來源 FieldInfo) |
IsSecurityCritical |
取得值,這個值表示目前欄位在目前信任層級上是否為安全性關鍵或安全性安全關鍵。 (繼承來源 FieldInfo) |
IsSecuritySafeCritical |
取得值,這個值表示目前欄位在目前信任層級上是否為安全性安全關鍵。 (繼承來源 FieldInfo) |
IsSecurityTransparent |
取得值,這個值表示目前欄位在目前信任層級上是否為透明。 (繼承來源 FieldInfo) |
IsSpecialName |
取得值,指出在 FieldAttributes 列舉值中是否設定對應的 |
IsStatic |
取得值,指出欄位是否為靜態的。 (繼承來源 FieldInfo) |
MemberType |
取得 MemberTypes 值,表示這個成員為欄位。 (繼承來源 FieldInfo) |
MetadataToken |
取得語彙基元,可識別中繼資料中的目前動態模組。 |
MetadataToken |
取得值,這個值可識別中繼資料項目。 (繼承來源 MemberInfo) |
Module |
取得模組,該型別包含定義這個欄位的型別。 |
Module |
取得用於定義型別的模組,該型別宣告以目前 MemberInfo 表示的成員。 (繼承來源 MemberInfo) |
Name |
指出這個欄位的名稱。 這個屬性是唯讀的。 |
ReflectedType |
指出取得這個物件的 Type 物件參考。 這個屬性是唯讀的。 |
ReflectedType |
取得類別物件,是用來取得這個 |
方法
明確介面實作
擴充方法
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) |
傳回值,指出所指定成員是否有可用的中繼資料語彙基元。 |