ILGenerator.DeclareLocalとは? わかりやすく解説

ILGenerator.DeclareLocal メソッド (Type, Boolean)

メモ : このメソッドは、.NET Framework version 2.0 で新しく追加されたものです。

指定した型のローカル変数を宣言し、オプションでその変数が参照するオブジェクトを固定します。

名前空間: System.Reflection.Emit
アセンブリ: mscorlib (mscorlib.dll 内)
構文構文

Public Overridable Function
 DeclareLocal ( _
    localType As Type, _
    pinned As Boolean _
) As LocalBuilder
Dim instance As ILGenerator
Dim localType As Type
Dim pinned As Boolean
Dim returnValue As LocalBuilder

returnValue = instance.DeclareLocal(localType, pinned)
public virtual LocalBuilder DeclareLocal (
    Type localType,
    bool pinned
)
public:
virtual LocalBuilder^ DeclareLocal (
    Type^ localType, 
    bool pinned
)
public LocalBuilder DeclareLocal (
    Type localType, 
    boolean pinned
)
public function DeclareLocal (
    localType : Type, 
    pinned : boolean
) : LocalBuilder

パラメータ

localType

ローカル変数の型を表す Type オブジェクト。

pinned

メモリ内でオブジェクトを固定する場合は true。それ以外の場合は false。

戻り値
ローカル変数を表す LocalBuilder オブジェクト。

例外例外
例外の種類条件

ArgumentNullException

localType が null 参照 (Visual Basic では Nothing) です。

InvalidOperationException

外側の型が TypeBuilder.CreateType メソッドで作成されています。

または

外側のメソッドのメソッド本体が MethodBuilder.CreateMethodBody メソッドによって作成されています。

NotSupportedException

この ILGenerator が関連付けられているメソッドが、MethodBuilder で表されていません。

解説解説
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照
関連項目
ILGenerator クラス
ILGenerator メンバ
System.Reflection.Emit 名前空間

ILGenerator.DeclareLocal メソッド

ローカル変数を宣言します。
オーバーロードの一覧オーバーロードの一覧

参照参照

関連項目

ILGenerator クラス
ILGenerator メンバ
System.Reflection.Emit 名前空間

ILGenerator.DeclareLocal メソッド (Type)

指定した型のローカル変数を宣言します。

名前空間: System.Reflection.Emit
アセンブリ: mscorlib (mscorlib.dll 内)
構文構文

Public Overridable Function
 DeclareLocal ( _
    localType As Type _
) As LocalBuilder
Dim instance As ILGenerator
Dim localType As Type
Dim returnValue As LocalBuilder

returnValue = instance.DeclareLocal(localType)
public virtual LocalBuilder DeclareLocal (
    Type localType
)
public:
virtual LocalBuilder^ DeclareLocal (
    Type^ localType
)
public LocalBuilder DeclareLocal (
    Type localType
)
public function DeclareLocal (
    localType : Type
) : LocalBuilder

パラメータ

localType

ローカル変数の型を表す Type オブジェクト。

戻り値
宣言されたローカル変数。

例外例外
例外の種類条件

ArgumentNullException

localType が null 参照 (Visual Basic では Nothing) です。

InvalidOperationException

外側の型が TypeBuilder.CreateType メソッドで作成されています。

解説解説
使用例使用例

DeclareLocal メソッドの実際の使用方法については、次のコード例を参照してください。

' 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 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 assembly.
AssemblyName^ myAssemblyName = gcnew 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", String::typeid,
 FieldAttributes::Private );

// Create the constructor.
array<Type^>^myConstructorArgs = {String::typeid};
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 = Object::typeid->GetConstructor( gcnew array<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, String::typeid, nullptr );

// Generate IL for 'Function1'.
ILGenerator^ myMethodIL = myMethod->GetILGenerator();

// Create local variables.
LocalBuilder^ myLB1 = myMethodIL->DeclareLocal( String::typeid );
myLB1->SetLocalSymInfo( "myString" );
Console::WriteLine( "'myLB1' type is :{0}", myLB1->LocalType );
LocalBuilder^ myLB2 = myMethodIL->DeclareLocal( int::typeid
 );
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." );
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照
関連項目
ILGenerator クラス
ILGenerator メンバ
System.Reflection.Emit 名前空間



英和和英テキスト翻訳

英語⇒日本語日本語⇒英語

辞書ショートカット

すべての辞書の索引

「ILGenerator.DeclareLocal」の関連用語

ILGenerator.DeclareLocalのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



ILGenerator.DeclareLocalのページの著作権

   
日本マイクロソフト株式会社日本マイクロソフト株式会社
© 2026 Microsoft.All rights reserved.

©2026 GRAS Group, Inc.RSS