/// <summary> /// 反射方法执行 /// </summary> /// <param name="method">方法</param> /// <returns>方法成员对象</returns> /// <example> /// <code lang="c#"> /// <![CDATA[ /// public class UserInfo{ /// public int ID{get;set;} /// /// public string Name{get;set;} /// /// public void Print(DateTime dt){ /// //输出 /// } /// } /// UserInfo user= new UserInfo(); /// user.ID=1; /// /// MethodBase method=typeof(UserInfo).GetMethod("Print"); /// /// var member=Reflector.GetMethod(method); /// /// member.Invoke(user,DateTime.Now); /// /// ]]> /// </code> /// </example> public static IMethodInvoker GetMethod(MethodBase method) { if (method == null) { throw new ArgumentNullException("method"); } IMethodInvoker invoker; if (_methodCache.TryGetValue(method, out invoker)) { return(invoker); } lock (_methodCache) { if (!_methodCache.TryGetValue(method, out invoker)) { invoker = _refFactory.GetMethodInvoker(method); _methodCache[method] = invoker; } } return(invoker); }
public static IMethodInvoker GetMethodInvoker(MethodBase method) { IMethodInvoker invoker; if (_methodCache.TryGetValue(method, out invoker)) { return(invoker); } lock (_methodCache) { if (!_methodCache.TryGetValue(method, out invoker)) { invoker = _refFactory.GetMethodInvoker(method); _methodCache[method] = invoker; } } return(invoker); }