メソッドまたはコンストラクタのローカル変数を表します。
この型のすべてのメンバの一覧については、LocalBuilder メンバ を参照してください。
System.Object
System.Reflection.Emit.LocalBuilder
NotInheritable Public Class LocalBuilder
[C#]
public sealed class LocalBuilder
[C++]
public __gc __sealed class LocalBuilder
[JScript]
public class LocalBuilder
スレッドセーフ
Reflection Emit は、Boolean パラメータ isSynchronized を true に設定して呼び出した AppDomain.DefineDynamicAssembly メソッドで作成されたアセンブリを使用する場合は、スレッド セーフです。
解説
LocalBuilder オブジェクトは、 DeclareLocal メソッドを使用して定義できます。
使用例
[Visual Basic, C#, C++] LocalBuilder を使用する例を次に示します。
Imports System
Imports System.Reflection
Imports System.Reflection.Emit
Imports System.Threading
Class LocalBuilder_Sample
Public Shared Sub Main()
Try
' Create an assembly.
Dim myAssemblyName As New AssemblyName()
myAssemblyName.Name = "SampleAssembly"
Dim myAssembly As AssemblyBuilder = Thread.GetDomain().DefineDynamicAssembly _
(myAssemblyName, AssemblyBuilderAccess.Run)
' Create a module 'myModule'.
Dim myModule As ModuleBuilder = myAssembly.DefineDynamicModule("SampleModule", True)
' Define a public class 'myClass'.
Dim myTypeBuilder As TypeBuilder = myModule.DefineType("myClass", TypeAttributes.Public)
' Define a private String field.
Dim myField As FieldBuilder = myTypeBuilder.DefineField("myMessage", GetType(String), _
FieldAttributes.Private)
' Create the constructor.
Dim myConstructorArgs As Type() = {GetType(String)}
Dim myConstructor As ConstructorBuilder = myTypeBuilder.DefineConstructor _
(MethodAttributes.Public, CallingConventions.Standard, myConstructorArgs)
' Generate IL for the method.
Dim myConstructorIL As ILGenerator = myConstructor.GetILGenerator()
myConstructorIL.Emit(OpCodes.Ldarg_0)
Dim mySuperConstructor As ConstructorInfo = GetType(Object).GetConstructor(New Type() {})
myConstructorIL.Emit(OpCodes.Call, mySuperConstructor)
myConstructorIL.Emit(OpCodes.Ldarg_0)
myConstructorIL.Emit(OpCodes.Ldarg_1)
myConstructorIL.Emit(OpCodes.Stfld, myField)
myConstructorIL.Emit(OpCodes.Ret)
' Create the 'Function1' public method.
Dim myMethod As MethodBuilder = myTypeBuilder.DefineMethod("Function1", MethodAttributes. _
Public, GetType(String), Nothing)
' Generate IL for 'Function1'.
Dim myMethodIL As ILGenerator = myMethod.GetILGenerator()
' Create local variables.
Dim myLB1 As LocalBuilder = myMethodIL.DeclareLocal(GetType(String))
myLB1.SetLocalSymInfo("myString")
Console.WriteLine("'myLB1' type is :{0}", myLB1.LocalType)
Dim myLB2 As LocalBuilder = myMethodIL.DeclareLocal(GetType(Integer))
myLB2.SetLocalSymInfo("myInt", 1, 2)
Console.WriteLine("'myLB2' type is :{0}", myLB2.LocalType)
myMethodIL.Emit(OpCodes.Ldstr, "Local value" )
myMethodIL.Emit(OpCodes.Stloc_0 )
myMethodIL.Emit(OpCodes.Ldloc_0 )
myMethodIL.Emit(OpCodes.Stloc_1)
myMethodIL.Emit(OpCodes.Ldloc_1 )
myMethodIL.Emit(OpCodes.Ret )
' Create "myClass" class.
Dim myType1 As Type = myTypeBuilder.CreateType()
Console.WriteLine("'myClass' is created.")
' Create an instance of the 'myClass'.
Dim myObject1 As Object = Activator.CreateInstance(myType1, New Object() {"HelloWorld"})
' Invoke 'Function1' method of 'myClass'.
Dim myObject2 As Object = myType1.InvokeMember("Function1", BindingFlags.InvokeMethod, _
Nothing, myObject1, Nothing)
Console.WriteLine("myClass.Function1 is called.")
Console.WriteLine("myClass.Function1 returned: {0}", myObject2)
Catch e As Exception
Console.WriteLine("Exception :{0}", e.Message)
End Try
End Sub 'Main
End Class 'LocalBuilder_Sample
[C#]
using System;
using System.Reflection;
using System.Reflection.Emit;
using System.Threading;
class LocalBuilder_Sample
{
public static void Main()
{
try
{
// Create an assembly.
AssemblyName myAssemblyName = new AssemblyName();
myAssemblyName.Name = "SampleAssembly";
AssemblyBuilder myAssembly = Thread.GetDomain().DefineDynamicAssembly(
myAssemblyName, AssemblyBuilderAccess.Run);
// Create a module 'myModule'.
ModuleBuilder myModule=myAssembly.DefineDynamicModule("SampleModule",true);
// Define a public class 'myClass'.
TypeBuilder myTypeBuilder = myModule.DefineType("myClass", TypeAttributes.Public);
// Define a private String field.
FieldBuilder myField = myTypeBuilder.DefineField("myMessage", typeof(String), FieldAttributes.Private);
// Create the constructor.
Type[] myConstructorArgs = { typeof(String) };
ConstructorBuilder myConstructor = myTypeBuilder.DefineConstructor(
MethodAttributes.Public, CallingConventions.Standard, myConstructorArgs);
// Generate IL for the method.
ILGenerator myConstructorIL = myConstructor.GetILGenerator();
myConstructorIL.Emit(OpCodes.Ldarg_0);
ConstructorInfo mySuperConstructor = typeof(Object).GetConstructor(new Type[0]);
myConstructorIL.Emit(OpCodes.Call, mySuperConstructor);
myConstructorIL.Emit(OpCodes.Ldarg_0);
myConstructorIL.Emit(OpCodes.Ldarg_1);
myConstructorIL.Emit(OpCodes.Stfld, myField);
myConstructorIL.Emit(OpCodes.Ret);
// Create the 'Function1' public method.
MethodBuilder myMethod = myTypeBuilder.DefineMethod("Function1",
MethodAttributes.Public, typeof(String), null);
// Generate IL for 'Function1'.
ILGenerator myMethodIL = myMethod.GetILGenerator();
// Create local variables.
LocalBuilder myLB1 = myMethodIL.DeclareLocal(typeof(string));
myLB1.SetLocalSymInfo("myString");
Console.WriteLine("'myLB1' type is :{0}", myLB1.LocalType);
LocalBuilder myLB2 = myMethodIL.DeclareLocal(typeof(int));
myLB2.SetLocalSymInfo("myInt",1,2);
Console.WriteLine("'myLB2' type is :{0}", myLB2.LocalType);
myMethodIL.Emit(OpCodes.Ldstr, "Local value" );
myMethodIL.Emit(OpCodes.Stloc_0 );
myMethodIL.Emit(OpCodes.Ldloc_0 );
myMethodIL.Emit(OpCodes.Stloc_1);
myMethodIL.Emit(OpCodes.Ldloc_1 );
myMethodIL.Emit(OpCodes.Ret );
// Create "myClass" class.
Type myType1 = myTypeBuilder.CreateType();
Console.WriteLine("'myClass' is created.");
// Create an instance of the 'myClass'.
Object myObject1 = Activator.CreateInstance(myType1, new Object[] { "HelloWorld" });
// Invoke 'Function1' method of 'myClass'.
Object myObject2 = myType1.InvokeMember("Function1", BindingFlags.InvokeMethod, null, myObject1, null);
Console.WriteLine("myClass.Function1 is called.");
Console.WriteLine("myClass.Function1 returned: {0}", myObject2);
}
catch(Exception e)
{
Console.WriteLine("Exception :{0}", e.Message );
}
}
}
[C++]
#using <mscorlib.dll>
using namespace System;
using namespace System::Reflection;
using namespace System::Reflection::Emit;
using namespace System::Threading;
int main()
{
try
{
// Create an assembly.
AssemblyName* myAssemblyName = new AssemblyName();
myAssemblyName->Name = S"SampleAssembly";
AssemblyBuilder* myAssembly = Thread::GetDomain()->DefineDynamicAssembly(
myAssemblyName, AssemblyBuilderAccess::Run);
// Create a module 'myModule'.
ModuleBuilder* myModule=myAssembly->DefineDynamicModule(S"SampleModule",true);
// Define a public class 'myClass'.
TypeBuilder* myTypeBuilder = myModule->DefineType(S"myClass", TypeAttributes::Public);
// Define a private String field.
FieldBuilder* myField =
myTypeBuilder->DefineField(S"myMessage", __typeof(String), FieldAttributes::Private);
// Create the constructor.
Type* myConstructorArgs[] = { __typeof(String) };
ConstructorBuilder* myConstructor = myTypeBuilder->DefineConstructor(
MethodAttributes::Public, CallingConventions::Standard, myConstructorArgs);
// Generate IL for the method.
ILGenerator* myConstructorIL = myConstructor->GetILGenerator();
myConstructorIL->Emit(OpCodes::Ldarg_0);
ConstructorInfo* mySuperConstructor = __typeof(Object)->GetConstructor(new Type*[0]);
myConstructorIL->Emit(OpCodes::Call, mySuperConstructor);
myConstructorIL->Emit(OpCodes::Ldarg_0);
myConstructorIL->Emit(OpCodes::Ldarg_1);
myConstructorIL->Emit(OpCodes::Stfld, myField);
myConstructorIL->Emit(OpCodes::Ret);
// Create the 'Function1' public method.
MethodBuilder* myMethod = myTypeBuilder->DefineMethod(S"Function1",
MethodAttributes::Public, __typeof(String), 0);
// Generate IL for 'Function1'.
ILGenerator* myMethodIL = myMethod->GetILGenerator();
// Create local variables.
LocalBuilder* myLB1 = myMethodIL->DeclareLocal(__typeof(String));
myLB1->SetLocalSymInfo(S"myString");
Console::WriteLine(S"'myLB1' type is :{0}", myLB1->LocalType);
LocalBuilder* myLB2 = myMethodIL->DeclareLocal(__typeof(int));
myLB2->SetLocalSymInfo(S"myInt",1,2);
Console::WriteLine(S"'myLB2' type is :{0}", myLB2->LocalType);
myMethodIL->Emit(OpCodes::Ldstr, S"Local value" );
myMethodIL->Emit(OpCodes::Stloc_0 );
myMethodIL->Emit(OpCodes::Ldloc_0 );
myMethodIL->Emit(OpCodes::Stloc_1);
myMethodIL->Emit(OpCodes::Ldloc_1 );
myMethodIL->Emit(OpCodes::Ret );
// Create "myClass" class.
Type* myType1 = myTypeBuilder->CreateType();
Console::WriteLine(S"'myClass' is created.");
// Create an instance of the 'myClass'.
Object* temp0 [] = {S"HelloWorld"};
Object* myObject1 = Activator::CreateInstance(myType1, temp0);
// Invoke 'Function1' method of 'myClass'.
Object* myObject2 =
myType1->InvokeMember(S"Function1", BindingFlags::InvokeMethod, 0, myObject1, 0);
Console::WriteLine(S"myClass.Function1 is called.");
Console::WriteLine(S"myClass.Function1 returned: {0}", myObject2);
}
catch(Exception* e)
{
Console::WriteLine(S"Exception :{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 内)