LocalBuilder Klasa
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Reprezentuje zmienną lokalną w metodzie lub konstruktorze.
public ref class LocalBuilder sealed : System::Reflection::LocalVariableInfo
public ref class LocalBuilder abstract : System::Reflection::LocalVariableInfo
public ref class LocalBuilder sealed : System::Runtime::InteropServices::_LocalBuilder
public ref class LocalBuilder sealed : System::Reflection::LocalVariableInfo, System::Runtime::InteropServices::_LocalBuilder
public sealed class LocalBuilder : System.Reflection.LocalVariableInfo
public abstract class LocalBuilder : System.Reflection.LocalVariableInfo
[System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)]
public sealed class LocalBuilder : System.Runtime.InteropServices._LocalBuilder
[System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)]
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class LocalBuilder : System.Reflection.LocalVariableInfo, System.Runtime.InteropServices._LocalBuilder
type LocalBuilder = class
inherit LocalVariableInfo
[<System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)>]
type LocalBuilder = class
interface _LocalBuilder
[<System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type LocalBuilder = class
inherit LocalVariableInfo
interface _LocalBuilder
Public NotInheritable Class LocalBuilder
Inherits LocalVariableInfo
Public MustInherit Class LocalBuilder
Inherits LocalVariableInfo
Public NotInheritable Class LocalBuilder
Implements _LocalBuilder
Public NotInheritable Class LocalBuilder
Inherits LocalVariableInfo
Implements _LocalBuilder
- Dziedziczenie
- Dziedziczenie
-
LocalBuilder
- Atrybuty
- Implementuje
Przykłady
Poniższy przykład tworzy metodę static
(Shared
w języku Visual Basic) o nazwie Function1
, która zwraca ciąg i ma parametr typu Int32. W treści metody przykład kodu tworzy LocalBuilder obiektów reprezentujących dwie zmienne lokalne i ustawia informacje o symbolach zmiennych lokalnych. Metoda nie robi nic znaczącego, ale treść metody demonstruje przechowywanie parametru w zmiennej lokalnej, przechowywanie ciągu literału w zmiennej lokalnej i ładowanie zmiennej lokalnej.
using namespace System;
using namespace System::Reflection;
using namespace System::Reflection::Emit;
using namespace System::Threading;
int main()
{
// Create an assembly.
AssemblyName^ myAssemblyName = gcnew AssemblyName;
myAssemblyName->Name = "SampleAssembly";
AssemblyBuilder^ myAssembly = Thread::GetDomain()->DefineDynamicAssembly(
myAssemblyName, AssemblyBuilderAccess::RunAndSave );
// Create a module. For a single-file assembly the module
// name is usually the same as the assembly name.
ModuleBuilder^ myModule = myAssembly->DefineDynamicModule(
myAssemblyName->Name, myAssemblyName->Name + ".dll", true );
// Define a public class 'Example'.
TypeBuilder^ myTypeBuilder = myModule->DefineType( "Example", TypeAttributes::Public );
// Create the 'Function1' public method, which takes an integer
// and returns a string.
MethodBuilder^ myMethod = myTypeBuilder->DefineMethod( "Function1",
MethodAttributes::Public | MethodAttributes::Static, String::typeid,
gcnew array<Type^> { int::typeid } );
// Generate IL for 'Function1'. The function body demonstrates
// assigning an argument to a local variable, assigning a
// constant string to a local variable, and putting the contents
// of local variables on the stack.
ILGenerator^ myMethodIL = myMethod->GetILGenerator();
// Create local variables named myString and myInt.
LocalBuilder^ myLB1 = myMethodIL->DeclareLocal( String::typeid );
myLB1->SetLocalSymInfo( "myString" );
Console::WriteLine( "local 'myString' type is: {0}", myLB1->LocalType );
LocalBuilder^ myLB2 = myMethodIL->DeclareLocal( int::typeid );
myLB2->SetLocalSymInfo( "myInt", 1, 2 );
Console::WriteLine( "local 'myInt' type is: {0}", myLB2->LocalType );
// Store the function argument in myInt.
myMethodIL->Emit( OpCodes::Ldarg_0 );
myMethodIL->Emit( OpCodes::Stloc_1 );
// Store a literal value in myString, and return the value.
myMethodIL->Emit( OpCodes::Ldstr, "string value" );
myMethodIL->Emit( OpCodes::Stloc_0 );
myMethodIL->Emit( OpCodes::Ldloc_0 );
myMethodIL->Emit( OpCodes::Ret );
// Create "Example" class.
Type^ myType1 = myTypeBuilder->CreateType();
Console::WriteLine( "'Example' is created." );
myAssembly->Save(myAssemblyName->Name + ".dll");
Console::WriteLine( "'{0}' is created.", myAssemblyName->Name + ".dll" );
// Invoke 'Function1' method of 'Example', passing the value 42.
Object^ myObject2 = myType1->InvokeMember( "Function1",
BindingFlags::InvokeMethod, nullptr, nullptr,
gcnew array<Object^> { 42 } );
Console::WriteLine( "Example::Function1 returned: {0}", myObject2 );
}
/* This code example produces the following output:
local 'myString' type is: System.String
local 'myInt' type is: System.Int32
'Example' is created.
'SampleAssembly.dll' is created.
Example::Function1 returned: string value
*/
using System;
using System.Reflection;
using System.Reflection.Emit;
using System.Threading;
class LocalBuilder_Sample
{
public static void Main()
{
// Create an assembly.
AssemblyName myAssemblyName = new AssemblyName();
myAssemblyName.Name = "SampleAssembly";
AssemblyBuilder myAssembly =
Thread.GetDomain().DefineDynamicAssembly(myAssemblyName,
AssemblyBuilderAccess.RunAndSave);
// Create a module. For a single-file assembly the module
// name is usually the same as the assembly name.
ModuleBuilder myModule =
myAssembly.DefineDynamicModule(myAssemblyName.Name,
myAssemblyName.Name + ".dll", true);
// Define a public class 'Example'.
TypeBuilder myTypeBuilder =
myModule.DefineType("Example", TypeAttributes.Public);
// Create the 'Function1' public method, which takes an integer
// and returns a string.
MethodBuilder myMethod = myTypeBuilder.DefineMethod("Function1",
MethodAttributes.Public | MethodAttributes.Static,
typeof(String), new Type[] { typeof(int) });
// Generate IL for 'Function1'. The function body demonstrates
// assigning an argument to a local variable, assigning a
// constant string to a local variable, and putting the contents
// of local variables on the stack.
ILGenerator myMethodIL = myMethod.GetILGenerator();
// Create local variables named myString and myInt.
LocalBuilder myLB1 = myMethodIL.DeclareLocal(typeof(string));
myLB1.SetLocalSymInfo("myString");
Console.WriteLine("local 'myString' type is: {0}", myLB1.LocalType);
LocalBuilder myLB2 = myMethodIL.DeclareLocal(typeof(int));
myLB2.SetLocalSymInfo("myInt", 1, 2);
Console.WriteLine("local 'myInt' type is: {0}", myLB2.LocalType);
// Store the function argument in myInt.
myMethodIL.Emit(OpCodes.Ldarg_0 );
myMethodIL.Emit(OpCodes.Stloc_1 );
// Store a literal value in myString, and return the value.
myMethodIL.Emit(OpCodes.Ldstr, "string value" );
myMethodIL.Emit(OpCodes.Stloc_0 );
myMethodIL.Emit(OpCodes.Ldloc_0 );
myMethodIL.Emit(OpCodes.Ret );
// Create "Example" class.
Type myType1 = myTypeBuilder.CreateType();
Console.WriteLine("'Example' is created.");
myAssembly.Save(myAssemblyName.Name + ".dll");
Console.WriteLine( "'{0}' is created.", myAssemblyName.Name + ".dll" );
// Invoke 'Function1' method of 'Example', passing the value 42.
Object myObject2 = myType1.InvokeMember("Function1",
BindingFlags.InvokeMethod, null, null, new Object[] { 42 });
Console.WriteLine("Example.Function1 returned: {0}", myObject2);
}
}
/* This code example produces the following output:
local 'myString' type is: System.String
local 'myInt' type is: System.Int32
'Example' is created.
'SampleAssembly.dll' is created.
Example.Function1 returned: string value
*/
Imports System.Reflection
Imports System.Reflection.Emit
Imports System.Threading
Class LocalBuilder_Sample
Public Shared Sub Main()
' Create an assembly.
Dim myAssemblyName As New AssemblyName()
myAssemblyName.Name = "SampleAssembly"
Dim myAssembly As AssemblyBuilder = _
Thread.GetDomain().DefineDynamicAssembly( myAssemblyName, _
AssemblyBuilderAccess.RunAndSave )
' Create a module. For a single-file assembly the module
' name is usually the same as the assembly name.
Dim myModule As ModuleBuilder = _
myAssembly.DefineDynamicModule(myAssemblyName.Name, _
myAssemblyName.Name & ".dll", True)
' Define a public class 'Example'.
Dim myTypeBuilder As TypeBuilder = _
myModule.DefineType("Example", TypeAttributes.Public)
' Create the 'Function1' public method, which takes an Integer
' and returns a string.
Dim myMethod As MethodBuilder = myTypeBuilder.DefineMethod("Function1", _
MethodAttributes.Public Or MethodAttributes.Static, _
GetType(String), New Type() { GetType(Integer) })
' Generate IL for 'Function1'. The function body demonstrates
' assigning an argument to a local variable, assigning a
' constant string to a local variable, and putting the contents
' of local variables on the stack.
Dim myMethodIL As ILGenerator = myMethod.GetILGenerator()
' Create local variables named myString and myInt.
Dim myLB1 As LocalBuilder = myMethodIL.DeclareLocal(GetType(String))
myLB1.SetLocalSymInfo("myString")
Console.WriteLine("local 'myString' type is: {0}", myLB1.LocalType)
Dim myLB2 As LocalBuilder = myMethodIL.DeclareLocal(GetType(Integer))
myLB2.SetLocalSymInfo("myInt", 1, 2)
Console.WriteLine("local 'myInt' type is: {0}", myLB2.LocalType)
' Store the function argument in myInt.
myMethodIL.Emit(OpCodes.Ldarg_0 )
myMethodIL.Emit(OpCodes.Stloc_1 )
' Store a literal value in myString, and return the value.
myMethodIL.Emit(OpCodes.Ldstr, "string value" )
myMethodIL.Emit(OpCodes.Stloc_0 )
myMethodIL.Emit(OpCodes.Ldloc_0 )
myMethodIL.Emit(OpCodes.Ret )
' Create "Example" class.
Dim myType1 As Type = myTypeBuilder.CreateType()
Console.WriteLine("'Example' is created.")
myAssembly.Save(myAssemblyName.Name & ".dll")
Console.WriteLine( "'{0}' is created.", myAssemblyName.Name & ".dll" )
' Invoke 'Function1' method of 'Example', passing the value 42.
Dim myObject2 As Object = myType1.InvokeMember("Function1", _
BindingFlags.InvokeMethod, Nothing, Nothing, New Object() { 42 })
Console.WriteLine("Example.Function1 returned: {0}", myObject2)
End Sub
End Class
' This code example produces the following output:
'
'local 'myString' type is: System.String
'local 'myInt' type is: System.Int32
''Example' is created.
''SampleAssembly.dll' is created.
'Example.Function1 returned: string value
Uwagi
Obiekt LocalBuilder
można zdefiniować przy użyciu metody DeclareLocal.
Konstruktory
LocalBuilder() |
Inicjuje nowe wystąpienie klasy LocalBuilder. |
Właściwości
IsPinned |
Pobiera wartość wskazującą, czy obiekt, do której odwołuje się zmienna lokalna, jest przypięty w pamięci. |
LocalIndex |
Pobiera indeks zerowy zmiennej lokalnej w treści metody. |
LocalType |
Pobiera typ zmiennej lokalnej. |
Metody
Equals(Object) |
Określa, czy określony obiekt jest równy bieżącemu obiektowi. (Odziedziczone po Object) |
GetHashCode() |
Służy jako domyślna funkcja skrótu. (Odziedziczone po Object) |
GetType() |
Pobiera Type bieżącego wystąpienia. (Odziedziczone po Object) |
MemberwiseClone() |
Tworzy płytkią kopię bieżącego Object. (Odziedziczone po Object) |
SetLocalSymInfo(String) |
Ustawia nazwę tej zmiennej lokalnej. |
SetLocalSymInfo(String, Int32, Int32) |
Ustawia nazwę i zakres leksykalny tej zmiennej lokalnej. |
SetLocalSymInfoCore(String) |
Po zastąpieniu w klasie pochodnej ustawia nazwę tej zmiennej lokalnej. |
ToString() |
Zwraca ciąg czytelny dla użytkownika, który opisuje zmienną lokalną. (Odziedziczone po LocalVariableInfo) |
ToString() |
Zwraca ciąg reprezentujący bieżący obiekt. (Odziedziczone po Object) |
Jawne implementacje interfejsu
_LocalBuilder.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) |
Mapuje zestaw nazw na odpowiedni zestaw identyfikatorów wysyłki. |
_LocalBuilder.GetTypeInfo(UInt32, UInt32, IntPtr) |
Pobiera informacje o typie dla obiektu, którego następnie można użyć do pobrania informacji o typie dla interfejsu. |
_LocalBuilder.GetTypeInfoCount(UInt32) |
Pobiera liczbę interfejsów informacyjnych typu zapewnianych przez obiekt (0 lub 1). |
_LocalBuilder.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) |
Zapewnia dostęp do właściwości i metod uwidocznionych przez obiekt. |