示例#1
0
        private void GenerateNewMemberWithPrivateSetter(MemberHandler pi, ILBuilder processor, ILBuilder ctorBuilder)
        {
            var dt = typeof(Action <,>).MakeGenericType(_model, pi.MemberType);
            var df = _result.DefineField("$" + pi.MemberInfo.Name, dt, fieldFlag);

            ctorBuilder.LoadArg(0);
            ctorBuilder.LoadToken(dt);
            ctorBuilder.Call(getTypeFromHandle);
            ctorBuilder.LoadLoc(0);
            ctorBuilder.LoadString(pi.MemberInfo.Name);
            ctorBuilder.CallVirtual(getProperty);
            ctorBuilder.LoadInt(1);
            ctorBuilder.CallVirtual(getSetMethod);
            ctorBuilder.Call(createDelegate);
            ctorBuilder.Cast(dt);
            ctorBuilder.SetField(df);

            processor.LoadArg(0);
            processor.LoadField(df);
            processor.LoadArg(1);
            GenerateNewMember(pi, processor);
            var invoke = dt.GetMethod("Invoke");

            processor.CallVirtual(invoke);
        }
示例#2
0
        private void GenerateConstructor()
        {
            _ctor = _result.DefineConstructor(MethodAttributes.Public,
                                              CallingConventions.Standard, new Type[] { });
            var ctorBuilder = new ILBuilder(_ctor.GetILGenerator());

            ctorBuilder.LoadArg(0);
            ctorBuilder.Call(objectCtor);
            ctorBuilder.DeclareLocal(typeof(Type));
            ctorBuilder.LoadToken(_model);
            ctorBuilder.Call(getTypeFromHandle);
            ctorBuilder.SetLoc(0);

            GenerateCtorInit(ctorBuilder);
            ctorBuilder.Return();
        }