Windows apps
Collapse the table of content
Expand the table of content
Information
The topic you requested is included in another documentation set. For convenience, it's displayed below. Choose Switch to see the topic in its original location.

ILGenerator::BeginScope Method ()

 

Begins a lexical scope.

Namespace:   System.Reflection.Emit
Assembly:  mscorlib (in mscorlib.dll)

public:
virtual void BeginScope()

Exception Condition
NotSupportedException

This ILGenerator belongs to a DynamicMethod.

This method is used to emit symbolic information. Local variables declared after BeginScope are scoped until the corresponding EndScope is called.

If the current ILGenerator is associated with a DynamicMethod object, it does not support symbolic information.

The following code sample illustrates the use of BeginScope and EndScope.

// Get the current AppDomain.
AppDomain^ myAppDomain = AppDomain::CurrentDomain;
AssemblyName^ myAssemblyName = gcnew AssemblyName;
myAssemblyName->Name = "SampleAssembly";

// Create a dynamic assembly 'myAssembly' with access mode 'Run'.
AssemblyBuilder^ myAssembly = myAppDomain->DefineDynamicAssembly( myAssemblyName, AssemblyBuilderAccess::Run );

// Create a dynamic module 'myModule' in 'myAssembly'.
ModuleBuilder^ myModule = myAssembly->DefineDynamicModule( "MyDynamicModule", true );

// Define a public class 'MyDynamicClass'.
TypeBuilder^ myTypeBuilder = myModule->DefineType( "MyDynamicClass", TypeAttributes::Public );

// Define a public string field.
FieldBuilder^ myField = myTypeBuilder->DefineField( "MyDynamicField", String::typeid, FieldAttributes::Public );

// Create the constructor.
array<Type^>^myConstructorArgs = {String::typeid};
ConstructorBuilder^ myConstructor = myTypeBuilder->DefineConstructor( MethodAttributes::Public, CallingConventions::Standard, myConstructorArgs );

// Generate IL for 'myConstructor'.
ILGenerator^ myConstructorIL = myConstructor->GetILGenerator();

// Emit the necessary opcodes.
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 );

// Define a dynamic method named 'MyDynamicMethod'.
MethodBuilder^ myMethod = myTypeBuilder->DefineMethod( "MyDynamicMethod", MethodAttributes::Public, String::typeid, nullptr );

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

// Begin the scope for a local variable.
myMethodIL->BeginScope();
LocalBuilder^ myLocalBuilder = myMethodIL->DeclareLocal( int::typeid );
Console::WriteLine( "\nTrying to access the local variable within the scope." );
Console::WriteLine( "'myLocalBuilder' type is :{0}", myLocalBuilder->LocalType );
myMethodIL->Emit( OpCodes::Ldstr, "Local value" );
myMethodIL->Emit( OpCodes::Stloc_0, myLocalBuilder );

// End the scope of 'myLocalBuilder'.
myMethodIL->EndScope();

// Access the local variable outside the scope.
Console::WriteLine( "\nTrying to access the local variable outside the scope:\n" );
myMethodIL->Emit( OpCodes::Stloc_0, myLocalBuilder );
myMethodIL->Emit( OpCodes::Ldloc_0 );
myMethodIL->Emit( OpCodes::Ret );

// Create 'MyDynamicClass' class.
Type^ myType1 = myTypeBuilder->CreateType();

.NET Framework
Available since 1.1
Portable Class Library
Supported in: portable .NET platforms
Silverlight
Available since 2.0
Windows Phone Silverlight
Available since 7.1
Return to top
Show:
© 2017 Microsoft