Esempio n. 1
0
        private static Type MakeNewCustomDelegate(Type[] types)
        {
#if FEATURE_REFEMIT
            Type   returnType = types[types.Length - 1];
            Type[] parameters = types.RemoveLast();

            TypeBuilder builder = AssemblyGen.DefineDelegateType("Delegate" + types.Length);
            builder.DefineConstructor(CtorAttributes, CallingConventions.Standard, _DelegateCtorSignature).SetImplementationFlags(ImplAttributes);
            builder.DefineMethod("Invoke", InvokeAttributes, returnType, parameters).SetImplementationFlags(ImplAttributes);
            return(builder.CreateType());
#else
            throw new NotSupportedException("Method signature not supported on this platform");
#endif
        }
Esempio n. 2
0
        private static Type MakeNewCustomDelegate(Type[] types)
        {
            Type returnType = types[types.Length - 1];

            Type[] parameters = types.RemoveLast();

            if (types.Any(t => t is Remotion.TypePipe.MutableReflection.Implementation.CustomType))
            {
                return(new DelegateTypePlaceholder(returnType, parameters));
            }

            TypeBuilder builder = AssemblyGen.DefineDelegateType("Delegate" + types.Length);

            builder.DefineConstructor(CtorAttributes, CallingConventions.Standard, _DelegateCtorSignature).SetImplementationFlags(ImplAttributes);
            builder.DefineMethod("Invoke", InvokeAttributes, returnType, parameters).SetImplementationFlags(ImplAttributes);
            return(builder.CreateType());
        }