예제 #1
0
파일: Function.cs 프로젝트: akinomyoga/afh
        /// <summary>
        /// 指定した引数に最も適合するメソッドのオーバーロードを検索します
        /// </summary>
        /// <param name="arguments">引数</param>
        /// <returns>最も適合するメソッドのオーバーロード</returns>
        /// <exception cref="ArgumentException">
        /// 指定した引数に適合するメソッドのオーバーロードが見つからなかった場合に発生します。
        /// </exception>
        protected System.Reflection.MethodInfo SelectOverload(JavaScript.Array arguments)
        {
            float comp0, compat = float.NegativeInfinity;

            System.Reflection.MethodInfo m0, m = null;
            int iM = this.methods.Length;
            int w  = 0;                 //重なり

            for (int i = 0; i < iM; i++)
            {
                m0    = this.methods[i];
                comp0 = FunctionBase.ConvertParamsCompat(m0, arguments);
                if (comp0 < compat)
                {
                    continue;
                }
                if (comp0 == compat)
                {
                    w++; continue;
                }
                w      = 1;
                compat = comp0;
                m      = m0;
            }
            if (compat == float.NegativeInfinity)
            {
                throw new System.ArgumentException(OVERLOAD_NONE, "arguments");
            }
            if (w > 1)
            {
                throw new System.ArgumentException(OVERLOAD_AMBIGUOUS, "arguments");
            }
            return(m);
        }