FieldBuilder.Attributes 属性
指示该字段的属性。此属性为只读。
**命名空间:**System.Reflection.Emit
**程序集:**mscorlib(在 mscorlib.dll 中)
语法
声明
Public Overrides ReadOnly Property Attributes As FieldAttributes
用法
Dim instance As FieldBuilder
Dim value As FieldAttributes
value = instance.Attributes
public override FieldAttributes Attributes { get; }
public:
virtual property FieldAttributes Attributes {
FieldAttributes get () override;
}
/** @property */
public FieldAttributes get_Attributes ()
public override function get Attributes () : FieldAttributes
属性值
该字段的属性。
备注
下面的代码阐释了如何使用 Attributes。
Imports System
Imports System.Threading
Imports System.Reflection
Imports System.Reflection.Emit
Imports System.Security.Permissions
Public Class FieldBuilder_Sample
Private Shared Function CreateType(currentDomain As AppDomain) As Type
' Create an assembly.
Dim myAssemblyName As New AssemblyName()
myAssemblyName.Name = "DynamicAssembly"
Dim myAssembly As AssemblyBuilder = currentDomain.DefineDynamicAssembly(myAssemblyName, _
AssemblyBuilderAccess.Run)
' Create a dynamic module in Dynamic Assembly.
Dim myModuleBuilder As ModuleBuilder = myAssembly.DefineDynamicModule("MyModule")
' Define a public class named "MyClass" in the assembly.
Dim myTypeBuilder As TypeBuilder = myModuleBuilder.DefineType("MyClass", _
TypeAttributes.Public)
' Define a private String field named "MyField" in the type.
Dim myFieldBuilder As FieldBuilder = myTypeBuilder.DefineField("MyField", _
GetType(String), FieldAttributes.Private Or FieldAttributes.Static)
' Create the constructor.
Dim constructorArgs As Type() ={GetType(String)}
Dim myConstructor As ConstructorBuilder = _
myTypeBuilder.DefineConstructor(MethodAttributes.Public, _
CallingConventions.Standard, constructorArgs)
Dim constructorIL As ILGenerator = myConstructor.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, myFieldBuilder)
constructorIL.Emit(OpCodes.Ret)
' Create the MyMethod method.
Dim myMethodBuilder As MethodBuilder =myTypeBuilder.DefineMethod("MyMethod", _
MethodAttributes.Public, GetType(String), Nothing)
Dim methodIL As ILGenerator = myMethodBuilder.GetILGenerator()
methodIL.Emit(OpCodes.Ldarg_0)
methodIL.Emit(OpCodes.Ldfld, myFieldBuilder)
methodIL.Emit(OpCodes.Ret)
If myFieldBuilder.Attributes.Equals(FieldAttributes.Static) Then
Console.WriteLine("Field attribute defined as Static")
Else
If myFieldBuilder.Attributes.Equals(FieldAttributes.Static Or FieldAttributes.Private) Then
Console.WriteLine("Field attributes are Static and Private")
End If
End If
Console.WriteLine("ReflectedType of Field is: " & myFieldBuilder.ReflectedType.ToString())
Return myTypeBuilder.CreateType()
End Function 'CreateType
<PermissionSetAttribute(SecurityAction.Demand, Name:="FullTrust")> _
Public Shared Sub Main()
Dim myType As Type = CreateType(Thread.GetDomain())
' Create an instance of the "HelloWorld" class.
Dim helloWorld As Object = Activator.CreateInstance(myType, New Object() { "HelloWorld" })
' Invoke the "MyMethod" of the "MyClass".
Dim myObject As Object = myType.InvokeMember("MyMethod", _
BindingFlags.InvokeMethod, Nothing, helloWorld, Nothing)
Console.WriteLine("MyClass.MyMethod returned: """ & myObject & """")
End Sub 'Main
End Class 'FieldBuilder_Sample
using System;
using System.Threading;
using System.Reflection;
using System.Reflection.Emit;
using System.Security.Permissions;
public class FieldBuilder_Sample
{
private static Type CreateType(AppDomain currentDomain)
{
// Create an assembly.
AssemblyName myAssemblyName = new AssemblyName();
myAssemblyName.Name = "DynamicAssembly";
AssemblyBuilder myAssembly =
currentDomain.DefineDynamicAssembly(myAssemblyName,AssemblyBuilderAccess.Run);
// Create a dynamic module in Dynamic Assembly.
ModuleBuilder myModuleBuilder=myAssembly.DefineDynamicModule("MyModule");
// Define a public class named "MyClass" in the assembly.
TypeBuilder myTypeBuilder= myModuleBuilder.DefineType("MyClass",TypeAttributes.Public);
// Define a private String field named "MyField" in the type.
FieldBuilder myFieldBuilder= myTypeBuilder.DefineField("MyField",
typeof(string),FieldAttributes.Private|FieldAttributes.Static);
// Create the constructor.
Type[] constructorArgs = { typeof(String) };
ConstructorBuilder myConstructor = myTypeBuilder.DefineConstructor(
MethodAttributes.Public, CallingConventions.Standard, constructorArgs);
ILGenerator constructorIL = myConstructor.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, myFieldBuilder);
constructorIL.Emit(OpCodes.Ret);
// Create the MyMethod method.
MethodBuilder myMethodBuilder= myTypeBuilder.DefineMethod("MyMethod",
MethodAttributes.Public,typeof(String),null);
ILGenerator methodIL = myMethodBuilder.GetILGenerator();
methodIL.Emit(OpCodes.Ldarg_0);
methodIL.Emit(OpCodes.Ldfld, myFieldBuilder);
methodIL.Emit(OpCodes.Ret);
if (myFieldBuilder.Attributes.Equals(FieldAttributes.Static))
{
Console.WriteLine("Field attribute defined as Static");
}
else if(myFieldBuilder.Attributes.Equals(FieldAttributes.Static|FieldAttributes.Private))
{
Console.WriteLine("Field attributes are Static and Private");
}
Console.WriteLine("ReflectedType of Field is: " + myFieldBuilder.ReflectedType);
return myTypeBuilder.CreateType();
}
[PermissionSetAttribute(SecurityAction.Demand, Name="FullTrust")]
public static void Main()
{
Type myType = CreateType(Thread.GetDomain());
// Create an instance of the "HelloWorld" class.
Object helloWorld = Activator.CreateInstance(myType, new Object[] { "HelloWorld" });
// Invoke the "MyMethod" of the "MyClass".
Object myObject = myType.InvokeMember("MyMethod",
BindingFlags.InvokeMethod, null, helloWorld, null);
Console.WriteLine("MyClass.MyMethod returned: \"" + myObject + "\"");
}
}
using namespace System;
using namespace System::Threading;
using namespace System::Reflection;
using namespace System::Reflection::Emit;
Type^ CreateType( AppDomain^ currentDomain )
{
// Create an assembly.
AssemblyName^ myAssemblyName = gcnew AssemblyName;
myAssemblyName->Name = "DynamicAssembly";
AssemblyBuilder^ myAssembly = currentDomain->DefineDynamicAssembly( myAssemblyName, AssemblyBuilderAccess::Run );
// Create a dynamic module in Dynamic Assembly.
ModuleBuilder^ myModuleBuilder = myAssembly->DefineDynamicModule( "MyModule" );
// Define a public class named S"MyClass" in the assembly.
TypeBuilder^ myTypeBuilder = myModuleBuilder->DefineType( "MyClass", TypeAttributes::Public );
// Define a private String field named S"MyField" in the type.
FieldBuilder^ myFieldBuilder = myTypeBuilder->DefineField( "MyField", String::typeid, static_cast<FieldAttributes>(FieldAttributes::Private | FieldAttributes::Static) );
// Create the constructor.
array<Type^>^constructorArgs = {String::typeid};
ConstructorBuilder^ myConstructor = myTypeBuilder->DefineConstructor( MethodAttributes::Public, CallingConventions::Standard, constructorArgs );
ILGenerator^ constructorIL = myConstructor->GetILGenerator();
constructorIL->Emit( OpCodes::Ldarg_0 );
ConstructorInfo^ superConstructor = Object::typeid->GetConstructor( gcnew array<Type^>(0) );
constructorIL->Emit( OpCodes::Call, superConstructor );
constructorIL->Emit( OpCodes::Ldarg_0 );
constructorIL->Emit( OpCodes::Ldarg_1 );
constructorIL->Emit( OpCodes::Stfld, myFieldBuilder );
constructorIL->Emit( OpCodes::Ret );
// Create the MyMethod method.
MethodBuilder^ myMethodBuilder = myTypeBuilder->DefineMethod( "MyMethod", MethodAttributes::Public, String::typeid, nullptr );
ILGenerator^ methodIL = myMethodBuilder->GetILGenerator();
methodIL->Emit( OpCodes::Ldarg_0 );
methodIL->Emit( OpCodes::Ldfld, myFieldBuilder );
methodIL->Emit( OpCodes::Ret );
if ( myFieldBuilder->Attributes.Equals( FieldAttributes::Static ) )
{
Console::WriteLine( "Field attribute defined as Static" );
}
else
if ( myFieldBuilder->Attributes.Equals( FieldAttributes::Static | FieldAttributes::Private ) )
{
Console::WriteLine( "Field attributes are Static and Private" );
}
Console::WriteLine( "ReflectedType of Field is : {0}", myFieldBuilder->ReflectedType );
return myTypeBuilder->CreateType();
}
int main()
{
try
{
Type^ myType = CreateType( Thread::GetDomain() );
// Create an instance of the S"HelloWorld" class.
array<Object^>^type = {"HelloWorld"};
Object^ helloWorld = Activator::CreateInstance( myType, type );
// Invoke the S"MyMethod" of the S"MyClass".
Object^ myObject = myType->InvokeMember( "MyMethod", BindingFlags::InvokeMethod, nullptr, helloWorld, nullptr );
Console::WriteLine( "MyClass::MyMethod returned: \"{0}\"", myObject );
}
catch ( Exception^ e )
{
Console::WriteLine( "Exception Caught {0}", e->Message );
}
}
平台
Windows 98、Windows 2000 SP4、Windows Millennium Edition、Windows Server 2003、Windows XP Media Center Edition、Windows XP Professional x64 Edition、Windows XP SP2、Windows XP Starter Edition
.NET Framework 并不是对每个平台的所有版本都提供支持。有关受支持版本的列表,请参见系统要求。
版本信息
.NET Framework
受以下版本支持:2.0、1.1、1.0