public string GetObjcSignature()
        {
            var objc = new StringBuilder(ObjCName);

            var end = FirstDefaultParameter == -1 ? Parameters.Length : FirstDefaultParameter;

            for (int n = 0; n < end; ++n)
            {
                ParameterInfo p = Parameters[n];

                if (objc.Length > ObjCName.Length)
                {
                    objc.Append(' ');
                }

                string paramName = FallBackToTypeName ? NameGenerator.GetParameterTypeName(p.ParameterType) : p.Name;
                if (n == 0)
                {
                    objc.Append(paramName.PascalCase());
                }
                else
                {
                    objc.Append(paramName.CamelCase());
                }

                string ptname = NameGenerator.GetObjCParamTypeName(p, Processor.Types);
                objc.Append(":(").Append(ptname).Append(")").Append(NameGenerator.GetExtendedParameterName(p, Parameters));
            }

            return(objc.ToString());
        }
        protected override string GetObjcSignature(bool includeParamNames)
        {
            string objName = BaseName;

            if (Method.IsSpecialName)
            {
                objName = objName.Replace("_", String.Empty);
            }

            var objc = new StringBuilder(objName);

            var end = FirstDefaultParameter == -1 ? Parameters.Length : FirstDefaultParameter;

            for (int n = 0; n < end; ++n)
            {
                ParameterInfo p = Parameters[n];

                if (includeParamNames)
                {
                    if (objc.Length > objName.Length)
                    {
                        objc.Append(' ');
                    }
                }

                string paramName = FallBackToTypeName ? NameGenerator.GetParameterTypeName(p.ParameterType) : p.Name;
                if (n > 0 || !IsExtension)
                {
                    if (n == 0)
                    {
                        if (FallBackToTypeName || Method.IsConstructor || (!Method.IsSpecialName && !IsOperator))
                        {
                            objc.Append(paramName.PascalCase());
                        }
                    }
                    else
                    {
                        objc.Append(paramName.CamelCase());
                    }
                }

                if (includeParamNames)
                {
                    if (n > 0 || !IsExtension)
                    {
                        string ptname = NameGenerator.GetObjCParamTypeName(p, Processor.Types);
                        objc.Append(":(").Append(ptname).Append(")").Append(NameGenerator.GetExtendedParameterName(p, Parameters));
                    }
                }
                else
                {
                    objc.Append(":");
                }
            }

            return(objc.ToString());
        }