次の方法で共有


FieldBuilder クラス

フィールドを定義および表現します。このクラスは継承できません。

この型のすべてのメンバの一覧については、FieldBuilder メンバ を参照してください。

System.Object
   System.Reflection.MemberInfo
      System.Reflection.FieldInfo
         System.Reflection.Emit.FieldBuilder

NotInheritable Public Class FieldBuilder
   Inherits FieldInfo
[C#]
public sealed class FieldBuilder : FieldInfo
[C++]
public __gc __sealed class FieldBuilder : public FieldInfo
[JScript]
public class FieldBuilder extends FieldInfo

スレッドセーフ

Reflection Emit は、Boolean パラメータ isSynchronizedtrue に設定して呼び出した AppDomain.DefineDynamicAssembly メソッドで作成されたアセンブリを使用する場合は、スレッド セーフです。

解説

DefineFieldDefineInitializedData 、または DefineUninitializedData を呼び出して、 FieldBuilder のインスタンスを取得します。

メモ    SetValue メソッドは、現在サポートされていません。代替手段としては、終了型にリフレクションして FieldInfo を取得し、 SetValue を呼び出してフィールドの値を設定します。

使用例

[Visual Basic, C#, C++] FieldBuilder の使用方法については、次のコード例を参照してください。

 
Imports System
Imports System.Threading
Imports System.Reflection
Imports System.Reflection.Emit

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 constructor As ConstructorBuilder = _
                  myTypeBuilder.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, 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)
      Console.WriteLine("Name               :" + myFieldBuilder.Name)
      Console.WriteLine("DeclaringType      : " + myFieldBuilder.DeclaringType.ToString())
      Console.WriteLine("Type               :" + myFieldBuilder.FieldType.ToString())
      Console.WriteLine("Token              :" + myFieldBuilder.GetToken().Token.ToString())
      Return myTypeBuilder.CreateType()
   End Function 'CreateType
   Public Shared Sub Main()
      Try
         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" method of the "MyClass" class.
         Dim myObject As Object = myType.InvokeMember("MyMethod", _
                     BindingFlags.InvokeMethod, Nothing, helloWorld, Nothing)
         Console.WriteLine("MyClass.MyMethod returned: " & Microsoft.VisualBasic.Chr(34) & myObject  & Microsoft.VisualBasic.Chr(34) )
     Catch e as Exception
            Console.WriteLine("Exception Caught "+e.Message)
     End Try
   End Sub 'Main
End Class 'FieldBuilder_Sample

[C#] 
using System;
using System.Threading;
using System.Reflection;
using System.Reflection.Emit;


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 constructor = myTypeBuilder.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, 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);
      Console.WriteLine("Name               :"+myFieldBuilder.Name);
      Console.WriteLine("DeclaringType      : "+myFieldBuilder.DeclaringType);
      Console.WriteLine("Type               :"+myFieldBuilder.FieldType);
      Console.WriteLine("Token              :"+myFieldBuilder.GetToken().Token);
      return myTypeBuilder.CreateType();
   }


   public static void Main()
   {
      try
      {
         Type myType = CreateType(Thread.GetDomain());
         // Create an instance of the "HelloWorld" class.
         Object helloWorld = Activator.CreateInstance(myType, new Object[] { "HelloWorld" });
         // Invoke the "MyMethod" method of the "MyClass" class.
         Object myObject  = myType.InvokeMember("MyMethod",
                        BindingFlags.InvokeMethod, null, helloWorld, null);
         Console.WriteLine("MyClass.MyMethod returned: \"" + myObject + "\"");
      }
      catch( Exception e)
      {
         Console.WriteLine("Exception Caught "+e.Message);
      }
  }
}

[C++] 
#using <mscorlib.dll>

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 = new AssemblyName();
   myAssemblyName->Name = S"DynamicAssembly";
   AssemblyBuilder* myAssembly =
      currentDomain->DefineDynamicAssembly(myAssemblyName, AssemblyBuilderAccess::Run);
   // Create a dynamic module in Dynamic Assembly.
   ModuleBuilder* myModuleBuilder=myAssembly->DefineDynamicModule(S"MyModule");
   // Define a public class named S"MyClass" in the assembly.
   TypeBuilder* myTypeBuilder= myModuleBuilder->DefineType(S"MyClass", TypeAttributes::Public);

   // Define a private String field named S"MyField" in the type.
   FieldBuilder* myFieldBuilder= myTypeBuilder->DefineField(S"MyField",
      __typeof(String), static_cast<FieldAttributes>(FieldAttributes::Private|FieldAttributes::Static));
   // Create the constructor.
   Type* constructorArgs[] = { __typeof(String) };
   ConstructorBuilder* constructor = myTypeBuilder->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, myFieldBuilder);
   constructorIL->Emit(OpCodes::Ret);

   // Create the MyMethod method.
   MethodBuilder* myMethodBuilder= myTypeBuilder->DefineMethod(S"MyMethod",
      MethodAttributes::Public, __typeof(String), 0);
   ILGenerator* methodIL = myMethodBuilder->GetILGenerator();
   methodIL->Emit(OpCodes::Ldarg_0);
   methodIL->Emit(OpCodes::Ldfld, myFieldBuilder);
   methodIL->Emit(OpCodes::Ret);
   Console::WriteLine(S"Name               : {0}", myFieldBuilder->Name);
   Console::WriteLine(S"DeclaringType      : {0}", myFieldBuilder->DeclaringType);
   Console::WriteLine(S"Type               : {0}", myFieldBuilder->FieldType);
   Console::WriteLine(S"Token              : {0}", __box(myFieldBuilder->GetToken().Token));
   return myTypeBuilder->CreateType();
}


int main() {
   try {
      Type* myType = CreateType(Thread::GetDomain());
      // Create an instance of the S"HelloWorld" class.
      Object* type[] = { S"HelloWorld" };
      Object* helloWorld = Activator::CreateInstance(myType, type);
      // Invoke the S"MyMethod" method of the S"MyClass" class.
      Object* myObject  = myType->InvokeMember(S"MyMethod",
         BindingFlags::InvokeMethod, 0, helloWorld, 0);
      Console::WriteLine(S"MyClass::MyMethod returned: \"{0}\"", myObject);
   } catch (Exception* e) {
      Console::WriteLine(S"Exception Caught {0}", e->Message);
   }
}

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

名前空間: System.Reflection.Emit

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ

アセンブリ: Mscorlib (Mscorlib.dll 内)

参照

FieldBuilder メンバ | System.Reflection.Emit 名前空間