internal static List <MethodDefinition> MemberFunctions(this TypeDefinition type, string ignoreAttribute = null)
        {
            List <MethodDefinition> methods = new List <MethodDefinition>();

            foreach (var member in type.Methods)
            {
                if (ignoreAttribute != null && member.HasAttribute(ignoreAttribute))
                {
                    continue;
                }
                if (member.IsConstructor)
                {
                    continue;
                }
                methods.Add(member);
            }
            foreach (var iface in type.AllInterfaces())
            {
                var r = iface.Resolve();
                if (ignoreAttribute != null && r.HasAttribute(ignoreAttribute))
                {
                    continue;
                }
                foreach (var member in r.Methods)
                {
                    if (ignoreAttribute != null && member.HasAttribute(ignoreAttribute))
                    {
                        continue;
                    }
                    if (member.IsConstructor)
                    {
                        continue;
                    }
                    methods.Add(member);
                }
            }
            return(methods);
        }