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::EndScope Method ()
.NET Framework (current version)
Ends a lexical scope.
Assembly: mscorlib (in mscorlib.dll)
| Exception | Condition |
|---|---|
| NotSupportedException | This ILGenerator belongs to a DynamicMethod. |
This method is used to emit symbolic information. It is used with BeginScope.
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
Available since 1.1
Portable Class Library
Supported in: portable .NET platforms
Silverlight
Available since 2.0
Windows Phone Silverlight
Available since 7.1
Show: