LocalBuilder Classe
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Representa uma variável local em um método ou construtor.
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
- Herança
- Herança
-
LocalBuilder
- Atributos
- Implementações
Exemplos
O exemplo a seguir cria um método static
(Shared
no Visual Basic) chamado Function1
que retorna uma cadeia de caracteres e tem um parâmetro de tipo Int32. No corpo do método, o exemplo de código cria LocalBuilder objetos que representam duas variáveis locais e define informações de símbolo para as variáveis locais. O método não faz nada significativo, mas o corpo do método demonstra como armazenar um parâmetro em uma variável local, armazenar uma cadeia de caracteres literal em uma variável local e carregar uma variável local.
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
Comentários
Um objeto LocalBuilder
pode ser definido usando o método DeclareLocal.
Construtores
LocalBuilder() |
Inicializa uma nova instância da classe LocalBuilder. |
Propriedades
IsPinned |
Obtém um valor que indica se o objeto referenciado pela variável local está fixado na memória. |
LocalIndex |
Obtém o índice baseado em zero da variável local dentro do corpo do método. |
LocalType |
Obtém o tipo da variável local. |
Métodos
Equals(Object) |
Determina se o objeto especificado é igual ao objeto atual. (Herdado de Object) |
GetHashCode() |
Serve como a função de hash padrão. (Herdado de Object) |
GetType() |
Obtém o Type da instância atual. (Herdado de Object) |
MemberwiseClone() |
Cria uma cópia superficial do Objectatual. (Herdado de Object) |
SetLocalSymInfo(String) |
Define o nome dessa variável local. |
SetLocalSymInfo(String, Int32, Int32) |
Define o nome e o escopo léxico dessa variável local. |
SetLocalSymInfoCore(String) |
Quando substituído em uma classe derivada, define o nome dessa variável local. |
ToString() |
Retorna uma cadeia de caracteres legível pelo usuário que descreve a variável local. (Herdado de LocalVariableInfo) |
ToString() |
Retorna uma cadeia de caracteres que representa o objeto atual. (Herdado de Object) |
Implantações explícitas de interface
_LocalBuilder.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) |
Mapeia um conjunto de nomes para um conjunto correspondente de identificadores de expedição. |
_LocalBuilder.GetTypeInfo(UInt32, UInt32, IntPtr) |
Recupera as informações de tipo de um objeto, que podem ser usadas para obter as informações de tipo de uma interface. |
_LocalBuilder.GetTypeInfoCount(UInt32) |
Recupera o número de interfaces de informações de tipo que um objeto fornece (0 ou 1). |
_LocalBuilder.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) |
Fornece acesso a propriedades e métodos expostos por um objeto. |