public static objc_method FromMethodInfo(MethodInfo method)
        {
            objc_method objc_method = new objc_method();
            string      name        = SelectorFromMethodInfo(method);
            string      types       = SignatureFromMethodInfo(method);

            foreach (ExportAttribute exattr in Attribute.GetCustomAttributes(method, typeof(ExportAttribute)))
            {
                name  = exattr.Selector == null ? name : exattr.Selector;
                types = exattr.Signature == null ? types : exattr.Signature;
            }

            objc_method.name  = Marshal.StringToHGlobalAnsi(name);
            objc_method.types = Marshal.StringToHGlobalAnsi(types);
            MethodInfo method_proxy = BuildMethodProxy(method);

            objc_method.imp = Delegate.CreateDelegate(MethodImplementation.FromMethodInfo(method_proxy), method_proxy);

            return(objc_method);
        }
        public static objc_method FromConstructorInfo(ConstructorInfo constructor)
        {
            objc_method objc_method = new objc_method();
            string      name        = SelectorFromConstructorInfo(constructor);
            string      types       = SignatureFromConstructorInfo(constructor);

            foreach (ExportAttribute exattr in Attribute.GetCustomAttributes(constructor, typeof(ExportAttribute)))
            {
                name  = exattr.Selector == null ? name : exattr.Selector;
                types = exattr.Signature == null ? types : exattr.Signature;
            }

            objc_method.name  = Marshal.StringToHGlobalAnsi(name);
            objc_method.types = Marshal.StringToHGlobalAnsi(types);
            // FIXME
            ConstructorInfo constructor_proxy = BuildConstructorProxy(constructor);

            objc_method.imp = Delegate.CreateDelegate(MethodImplementation.FromConstructorInfo(constructor_proxy), null);

            return(objc_method);
        }