LuaInterface.CodeGeneration.GenerateEvent C# (CSharp) Method

GenerateEvent() private method

private GenerateEvent ( Type eventHandlerType ) : Type
eventHandlerType System.Type
return System.Type
        private Type GenerateEvent(Type eventHandlerType)
        {
            string typeName;
            lock(this)
            {
                typeName = "LuaGeneratedClass" + luaClassNumber;
                luaClassNumber++;
            }
            // Define a public class in the assembly, called typeName
            TypeBuilder myType=newModule.DefineType(typeName,TypeAttributes.Public,eventHandlerParent);

            // Defines the handler method. Its signature is void(object,<subclassofEventArgs>)
            Type[] paramTypes = new Type[2];
            paramTypes[0]=typeof(object);
            paramTypes[1]=eventHandlerType;
            Type returnType=typeof(void);
            MethodBuilder handleMethod=myType.DefineMethod("HandleEvent",
                MethodAttributes.Public|MethodAttributes.HideBySig,
                returnType,paramTypes);

            // Emits the IL for the method. It loads the arguments
            // and calls the handleEvent method of the base class
            ILGenerator generator=handleMethod.GetILGenerator( );
            generator.Emit(OpCodes.Ldarg_0);
            generator.Emit(OpCodes.Ldarg_1);
            generator.Emit(OpCodes.Ldarg_2);
            MethodInfo miGenericEventHandler;
            miGenericEventHandler=eventHandlerParent.GetMethod("handleEvent");
            generator.Emit(OpCodes.Call,miGenericEventHandler);
            // returns
            generator.Emit(OpCodes.Ret);

            // creates the new type
            return myType.CreateType();
        }