예제 #1
0
        /// <summary>
        /// type 型の静的メソッド methodName を parameters を指定して呼び出します。
        /// </summary>
        /// <param name="type">呼び出すメソッドを静的に保持する型。</param>
        /// <param name="methodName">呼び出すメソッド名。</param>
        /// <param name="parameters">メソッドに渡すパラメータ。</param>
        /// <returns>メソッドの戻り値が void 型の場合は null。それ以外の場合はメソッドの戻り値。</returns>
        public static object Call(Type type, string methodName, params object[] parameters)
        {
            var m = type.GetMethod(methodName, Reflector.StaticAllFlags);

            if (m == null)
            {
                throw MethodReflectionException.NotFound(type, methodName, parameters);
            }

            try
            {
                return(m.Invoke(null, parameters));
            }
            catch (Exception ex)
            {
                throw MethodReflectionException.InvokeError(type, methodName, parameters, ex);
            }
        }
예제 #2
0
        /// <summary>
        /// source インスタンスのメンバメソッド methodName を parameters を指定して呼び出します。
        /// </summary>
        /// <param name="source">呼び出すメソッドをメンバとして保持するインスタンス。</param>
        /// <param name="methodName">呼び出すメソッド名。</param>
        /// <param name="parameters">メソッドに渡すパラメータ。</param>
        /// <returns>メソッドの戻り値が void 型の場合は null。それ以外の場合はメソッドの戻り値。</returns>
        public static object Call(this object source, string methodName, params object[] parameters)
        {
            var m = source.GetType().GetMethod(methodName, Reflector.InstanceAllFlags, null, parameters.Select(x => x.GetType()).ToArray(), null);

            if (m == null)
            {
                throw MethodReflectionException.NotFound(source.GetType(), methodName, parameters);
            }

            try
            {
                return(m.Invoke(source, parameters));
            }
            catch (Exception ex)
            {
                throw MethodReflectionException.InvokeError(source.GetType(), methodName, parameters, ex);
            }
        }