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 |
指示该字段的属性。 此属性为只读。 |
CustomAttributes |
获取包含此成员自定义属性的集合。 (继承自 MemberInfo) |
DeclaringType |
指示对声明该字段的类型的 Type 对象的引用。 此属性为只读。 |
FieldHandle |
指示该字段的内部元数据句柄。 此属性为只读。 |
FieldHandle |
获取 |
FieldType |
指示表示该字段的类型的 Type 对象。 此属性为只读。 |
IsAssembly |
获取一个值,该值指示此字段的潜在可见性是否由 Assembly 描述;也就是说,此字段只对同一程序集中的其他类型可见,而对该程序集以外的派生类型则不可见。 (继承自 FieldInfo) |
IsCollectible |
获取一个值,该值指示此 MemberInfo 对象是否是包含在可回收的 AssemblyLoadContext 中的程序集的一部分。 (继承自 MemberInfo) |
IsFamily |
获取一个值,该值指示此字段的可见性是否由 Family 描述;也就是说,此字段仅在其类和派生类内可见。 (继承自 FieldInfo) |
IsFamilyAndAssembly |
获取一个值,该值指示此字段的可见性是否由 FamANDAssem 描述;也就是说,可从派生类访问此字段,但仅当这些派生类在同一程序集中时。 (继承自 FieldInfo) |
IsFamilyOrAssembly |
获取一个值,该值指示此字段的潜在可见性是否由 FamORAssem 描述;也就是说,可通过派生类(无论其位置如何)和同一程序集中的类访问此字段。 (继承自 FieldInfo) |
IsInitOnly |
获取一个值,通过该值指示此字段是否只能在构造函数的主体中设置。 (继承自 FieldInfo) |
IsLiteral |
获取一个值,通过该值指示该值是否在编译时写入并且不能更改。 (继承自 FieldInfo) |
IsNotSerialized |
已过时.
获取一个值,通过该值指示此字段是否有 |
IsPinvokeImpl |
获取一个值,该值指示是否已在 FieldAttributes 中设置相应的 |
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) |
返回表示元数据令牌是否可用于指定的成员的值。 |