LocalBuilder Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Представляет локальную переменную в методе или конструкторе.
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
- Наследование
- Наследование
-
LocalBuilder
- Атрибуты
- Реализации
Примеры
В следующем примере создается метод static
(Shared
в Visual Basic) с именем Function1
, который возвращает строку и имеет параметр типа Int32. В тексте метода пример кода создает объекты LocalBuilder, представляющие две локальные переменные, и задает сведения о символах для локальных переменных. Метод не делает ничего значительного, но текст метода демонстрирует хранение параметра в локальную переменную, хранение литеральной строки в локальную переменную и загрузку локальной переменной.
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
Комментарии
Объект LocalBuilder
можно определить с помощью метода DeclareLocal.
Конструкторы
LocalBuilder() |
Инициализирует новый экземпляр класса LocalBuilder. |
Свойства
IsPinned |
Получает значение, указывающее, закреплен ли объект, на который ссылается локальная переменная, в памяти. |
LocalIndex |
Возвращает отсчитываемый от нуля индекс локальной переменной в теле метода. |
LocalType |
Возвращает тип локальной переменной. |
Методы
Equals(Object) |
Определяет, равен ли указанный объект текущему объекту. (Унаследовано от Object) |
GetHashCode() |
Служит хэш-функцией по умолчанию. (Унаследовано от Object) |
GetType() |
Возвращает Type текущего экземпляра. (Унаследовано от Object) |
MemberwiseClone() |
Создает неглубокую копию текущей Object. (Унаследовано от Object) |
SetLocalSymInfo(String) |
Задает имя этой локальной переменной. |
SetLocalSymInfo(String, Int32, Int32) |
Задает имя и лексическую область этой локальной переменной. |
SetLocalSymInfoCore(String) |
При переопределении в производном классе задает имя этой локальной переменной. |
ToString() |
Возвращает удобочитаемую пользователем строку, описывающую локальную переменную. (Унаследовано от LocalVariableInfo) |
ToString() |
Возвращает строку, представляющую текущий объект. (Унаследовано от Object) |
Явные реализации интерфейса
_LocalBuilder.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) |
Сопоставляет набор имен с соответствующим набором идентификаторов диспетчера. |
_LocalBuilder.GetTypeInfo(UInt32, UInt32, IntPtr) |
Извлекает сведения о типе объекта, который затем можно использовать для получения сведений о типе для интерфейса. |
_LocalBuilder.GetTypeInfoCount(UInt32) |
Извлекает количество интерфейсов сведений о типе, которые предоставляет объект (0 или 1). |
_LocalBuilder.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) |
Предоставляет доступ к свойствам и методам, предоставляемым объектом. |