/// <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); } }
/// <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); } }