public void FinishType(Type finalType) { var method = new ILDynamicMethodImpl("proxy", _delegateType, null); var il = method.Generator; for (ushort i = 0; i < _parametersCount; i++) { il.Ldarg(i); } if (_opCode == OpCodes.Call) { il.Call(_methodInfo); } else if (_opCode == OpCodes.Callvirt) { il.Callvirt(_methodInfo); } else if (_opCode == OpCodes.Newobj) { il.Newobj(_constructorInfo); } else { throw new InvalidOperationException(); } il.Ret(); finalType.GetField("_" + _name, BindingFlags.NonPublic | BindingFlags.Static).SetValue(null, method.Create()); }