Пример #1
0
        static public T CreateDynamicConstructorInvokerDelegate <T>(this ConstructorInfo item)
        {
            return(item.CreateDynamicMethodDelegate <T>("Invoker", delegate(MethodBase method) {
                ILParameter arguments = method.GetTechnicalILParameter(0);

                return new ILReturn(
                    new ILNew(
                        item,
                        arguments.GetILExpandedParams(item)
                        )
                    );
            }));
        }
Пример #2
0
        static public T CreateDynamicTechnicalMethodInvokerDelegate <T>(this MethodInfo item)
        {
            if (item.IsExtensionMethod())
            {
                return(item.CreateDynamicMethodDelegate <T>("TechnicalInvoker", delegate(MethodBase method) {
                    ILParameter target = method.GetTechnicalILParameter(0);
                    ILParameter arguments = method.GetTechnicalILParameter(1);

                    return item.GetStaticILMethodInvokation(arguments.GetILExpandedParams(item));
                }));
            }

            return(item.CreateDynamicEffectiveMethodInvokerDelegate <T>());
        }
Пример #3
0
        static public T CreateDynamicEffectiveMethodInvokerDelegate <T>(this MethodInfo item)
        {
            return(item.CreateDynamicMethodDelegate <T>("Invoker", delegate(MethodBase method) {
                ILParameter target = method.GetTechnicalILParameter(0);
                ILParameter arguments = method.GetTechnicalILParameter(1);

                return new ILReturn(
                    new ILMethodInvokation(
                        target.GetILThinCast(item.GetILMethodInvokationType()),
                        item,
                        arguments.GetILExpandedParams(item)
                        )
                    );
            }));
        }
Пример #4
0
        static public T CreateDynamicPropertyGetterDelegate <T>(this PropertyInfo item)
        {
            MethodInfo get_method = item.GetGetMethod(true);

            return(item.CreateDynamicMethodDelegate <T>("Getter", delegate(MethodBase method) {
                ILParameter target = method.GetTechnicalILParameter(0);
                ILParameter index = method.GetTechnicalILParameter(1);

                return new ILReturn(
                    new ILMethodInvokation(
                        target.GetILThinCast(get_method.GetILMethodInvokationType()),
                        get_method,
                        index.GetILExpandedParams(item.GetIndexParameters().Convert(p => p.ParameterType))
                        )
                    );
            }));
        }